Explorar o código

提交当前所有需求改动

code4eat hai 8 meses
pai
achega
5822d26066
Modificáronse 91 ficheiros con 5610 adicións e 1009 borrados
  1. 265 0
      .VSCodeCounter/2024-11-05_10-42-46/details.md
  2. 61 0
      .VSCodeCounter/2024-11-05_10-42-46/diff-details.md
  3. 48 0
      .VSCodeCounter/2024-11-05_10-42-46/diff.csv
  4. 71 0
      .VSCodeCounter/2024-11-05_10-42-46/diff.md
  5. 120 0
      .VSCodeCounter/2024-11-05_10-42-46/diff.txt
  6. 252 0
      .VSCodeCounter/2024-11-05_10-42-46/results.csv
  7. 0 0
      .VSCodeCounter/2024-11-05_10-42-46/results.json
  8. 128 0
      .VSCodeCounter/2024-11-05_10-42-46/results.md
  9. 381 0
      .VSCodeCounter/2024-11-05_10-42-46/results.txt
  10. 12 1
      .umirc.ts
  11. 36 34
      src/app.tsx
  12. 3 5
      src/components/KCIMLeftList/index.tsx
  13. 1 1
      src/components/ResizableContainer/style.less
  14. 15 2
      src/components/SQLEditor/index.tsx
  15. 10 0
      src/global.less
  16. 3 3
      src/pages/baseInfoMana/checkGroupMana/index.tsx
  17. 1 1
      src/pages/baseInfoMana/checkGroupMana/tableSelector.tsx
  18. 2 2
      src/pages/baseInfoMana/empMana/index.tsx
  19. 1 1
      src/pages/baseInfoMana/empMana/tableSelector.tsx
  20. 2 2
      src/pages/baseInfoMana/unitMana/index.tsx
  21. 1 1
      src/pages/baseInfoMana/unitMana/tableSelector.tsx
  22. 23 5
      src/pages/baseSetting/accountingAccountSet/accountingSubMana/index.tsx
  23. 24 7
      src/pages/baseSetting/accountingAccountSet/accountingSubMap/index.tsx
  24. 3 3
      src/pages/baseSetting/accountingAccountSet/chargeItemMap/index.tsx
  25. 1 1
      src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/index.tsx
  26. 2 2
      src/pages/baseSetting/costAllocationSet/allocationLevelSet/index.tsx
  27. 1 1
      src/pages/baseSetting/costAllocationSet/allocationParamsMap/index.tsx
  28. 9 68
      src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/index.tsx
  29. 4 4
      src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/index.tsx
  30. 2 2
      src/pages/baseSetting/costAllocationSet/idleCostSetting/index.tsx
  31. 3 1
      src/pages/baseSetting/costAllocationSet/revenueImputationSet/index.tsx
  32. 386 205
      src/pages/baseSetting/otherItemSet/departmentCostCalc/index.tsx
  33. 3 3
      src/pages/baseSetting/otherItemSet/departmentCostCalc/service.ts
  34. 22 0
      src/pages/baseSetting/otherItemSet/departmentCostCalc/style.less
  35. 2 2
      src/pages/baseSetting/otherItemSet/departmentCostCalc/transform.tsx
  36. 3 3
      src/pages/baseSetting/otherItemSet/diySqlMana/index.tsx
  37. 57 53
      src/pages/baseSetting/otherItemSet/reportItemSet/index.tsx
  38. 31 14
      src/pages/baseSetting/otherItemSet/reportItemSet/style.less
  39. 1 1
      src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/index.tsx
  40. 1 1
      src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/index.tsx
  41. 19 22
      src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/index.tsx
  42. 2 2
      src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/index.tsx
  43. 80 51
      src/pages/costAccounting/calcPageTemplate/columns.tsx
  44. 217 39
      src/pages/costAccounting/calcPageTemplate/index.tsx
  45. 10 2
      src/pages/costAccounting/calcPageTemplate/service.ts
  46. 15 0
      src/pages/costAccounting/calcPageTemplate/style.less
  47. 4 2
      src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/index.tsx
  48. 5 2
      src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/index.tsx
  49. 4 2
      src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/index.tsx
  50. 2 2
      src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/index.tsx
  51. 6 2
      src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/index.tsx
  52. 2 2
      src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/index.tsx
  53. 2 2
      src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/index.tsx
  54. 3 3
      src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/index.tsx
  55. 4 3
      src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/index.tsx
  56. 0 1
      src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/editTableModal.tsx
  57. 2 2
      src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/index.tsx
  58. 0 1
      src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/tableSelector.tsx
  59. 2 2
      src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/index.tsx
  60. 4 1
      src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx
  61. 2 2
      src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/index.tsx
  62. 2 2
      src/pages/costLibraryManagement/reportMana/reportColumnMana/UpDateActBtn.tsx
  63. 3 2
      src/pages/costLibraryManagement/reportMana/reportColumnMana/index.tsx
  64. 181 76
      src/pages/costLibraryManagement/reportMana/reportListMana/index.tsx
  65. 2 2
      src/pages/costLibraryManagement/reportMana/reportNavSet/index.tsx
  66. 876 0
      src/pages/departmentCostCheck/index.tsx
  67. 139 0
      src/pages/departmentCostCheck/service.ts
  68. 200 0
      src/pages/departmentCostCheck/style.less
  69. 1057 0
      src/pages/departmentMenzhuCostCalc/index.tsx
  70. 57 0
      src/pages/departmentMenzhuCostCalc/service.ts
  71. 200 0
      src/pages/departmentMenzhuCostCalc/style.less
  72. 49 45
      src/pages/incomeCollectionAction/index.tsx
  73. 2 2
      src/pages/monthlyInfoCollection/components/leftAndRighrStructure.tsx
  74. 2 1
      src/pages/monthlyInfoCollection/index.tsx
  75. 10 27
      src/pages/monthlyInfoSearch/empCostDataImport/index.tsx
  76. 5 25
      src/pages/monthlyInfoSearch/incomeCostDataImport/index.tsx
  77. 7 52
      src/pages/monthlyInfoSearch/patientChargeItemsImport/index.tsx
  78. 3 47
      src/pages/monthlyInfoSearch/patientInfoImport/index.tsx
  79. 2 2
      src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/index.tsx
  80. 66 26
      src/pages/reportExport/report/ExportProgressModal.tsx
  81. 279 99
      src/pages/reportExport/report/index.tsx
  82. 10 1
      src/pages/reportExport/report/service.ts
  83. 33 7
      src/pages/reportExport/report/style.less
  84. 2 2
      src/pages/setting/fenyeTemplate/index.tsx
  85. 2 2
      src/pages/setting/qualitativeOptionsMana/index.tsx
  86. 4 3
      src/pages/specialDataImport/index.tsx
  87. 19 7
      src/pages/static/index.tsx
  88. 21 4
      src/utils/tableToExcel.ts
  89. 1 1
      src/utils/zhongtaiC.js
  90. BIN=BIN
      static/huizong.png
  91. BIN=BIN
      static/moren.png

+ 265 - 0
.VSCodeCounter/2024-11-05_10-42-46/details.md

@@ -0,0 +1,265 @@
+# Details
+
+Date : 2024-11-05 10:42:46
+
+Directory /Users/dema/work/CostAccountingSys
+
+Total : 250 files,  44380 codes, 2971 comments, 8813 blanks, all 56164 lines
+
+[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
+
+## Files
+| filename | language | code | comment | blank | total |
+| :--- | :--- | ---: | ---: | ---: | ---: |
+| [.eslintrc.js](/.eslintrc.js) | JavaScript | 3 | 0 | 1 | 4 |
+| [.prettierignore](/.prettierignore) | Ignore | 3 | 0 | 1 | 4 |
+| [.prettierrc](/.prettierrc) | JSON | 8 | 0 | 1 | 9 |
+| [.stylelintrc.js](/.stylelintrc.js) | JavaScript | 3 | 0 | 1 | 4 |
+| [.umirc.ts](/.umirc.ts) | TypeScript | 389 | 14 | 15 | 418 |
+| [README.md](/README.md) | Markdown | 2 | 0 | 2 | 4 |
+| [config/proxy.ts](/config/proxy.ts) | TypeScript | 0 | 8 | 4 | 12 |
+| [mock/home.ts](/mock/home.ts) | TypeScript | 47 | 8 | 5 | 60 |
+| [mock/monthlyData.ts](/mock/monthlyData.ts) | TypeScript | 156 | 8 | 78 | 242 |
+| [mock/monthlyInfo.ts](/mock/monthlyInfo.ts) | TypeScript | 147 | 8 | 50 | 205 |
+| [mock/monthlySet.ts](/mock/monthlySet.ts) | TypeScript | 43 | 8 | 3 | 54 |
+| [mock/userAPI.ts](/mock/userAPI.ts) | TypeScript | 19 | 0 | 2 | 21 |
+| [package.json](/package.json) | JSON | 47 | 0 | 1 | 48 |
+| [src/access.ts](/src/access.ts) | TypeScript | 45 | 12 | 22 | 79 |
+| [src/app.tsx](/src/app.tsx) | TypeScript JSX | 419 | 64 | 119 | 602 |
+| [src/authWrapper.tsx](/src/authWrapper.tsx) | TypeScript JSX | 46 | 12 | 7 | 65 |
+| [src/components/Guide/Guide.less](/src/components/Guide/Guide.less) | Less | 4 | 0 | 1 | 5 |
+| [src/components/Guide/Guide.tsx](/src/components/Guide/Guide.tsx) | TypeScript JSX | 19 | 1 | 4 | 24 |
+| [src/components/Guide/index.ts](/src/components/Guide/index.ts) | TypeScript | 2 | 0 | 1 | 3 |
+| [src/components/KCIMDrawerForm/index.tsx](/src/components/KCIMDrawerForm/index.tsx) | TypeScript JSX | 6 | 9 | 8 | 23 |
+| [src/components/KCIMDrawerForm/style.less](/src/components/KCIMDrawerForm/style.less) | Less | 17 | 0 | 3 | 20 |
+| [src/components/KCIMLeftList/index.tsx](/src/components/KCIMLeftList/index.tsx) | TypeScript JSX | 168 | 61 | 51 | 280 |
+| [src/components/KCIMLeftList/style.less](/src/components/KCIMLeftList/style.less) | Less | 110 | 8 | 20 | 138 |
+| [src/components/KCIMModalForm/index.tsx](/src/components/KCIMModalForm/index.tsx) | TypeScript JSX | 23 | 8 | 11 | 42 |
+| [src/components/KCIMPageContainer/index.tsx](/src/components/KCIMPageContainer/index.tsx) | TypeScript JSX | 75 | 8 | 18 | 101 |
+| [src/components/KCIMPageContainer/style.less](/src/components/KCIMPageContainer/style.less) | Less | 119 | 0 | 19 | 138 |
+| [src/components/KCIMTable/index.tsx](/src/components/KCIMTable/index.tsx) | TypeScript JSX | 40 | 11 | 15 | 66 |
+| [src/components/KCIMTable/style.less](/src/components/KCIMTable/style.less) | Less | 179 | 8 | 50 | 237 |
+| [src/components/KCIMTableSelector/index.tsx](/src/components/KCIMTableSelector/index.tsx) | TypeScript JSX | 144 | 10 | 40 | 194 |
+| [src/components/KCIMTableSelector/style.less](/src/components/KCIMTableSelector/style.less) | Less | 29 | 0 | 4 | 33 |
+| [src/components/KCIMUpload/index.tsx](/src/components/KCIMUpload/index.tsx) | TypeScript JSX | 56 | 9 | 14 | 79 |
+| [src/components/KCIMUpload/style.less](/src/components/KCIMUpload/style.less) | Less | 26 | 0 | 5 | 31 |
+| [src/components/ProgressModal/index.tsx](/src/components/ProgressModal/index.tsx) | TypeScript JSX | 74 | 8 | 11 | 93 |
+| [src/components/ProgressModal/service.ts](/src/components/ProgressModal/service.ts) | TypeScript | 17 | 8 | 9 | 34 |
+| [src/components/ResizableContainer/index.tsx](/src/components/ResizableContainer/index.tsx) | TypeScript JSX | 54 | 8 | 10 | 72 |
+| [src/components/ResizableContainer/style.less](/src/components/ResizableContainer/style.less) | Less | 18 | 0 | 7 | 25 |
+| [src/components/SQLEditor/index.tsx](/src/components/SQLEditor/index.tsx) | TypeScript JSX | 108 | 10 | 15 | 133 |
+| [src/components/SQLEditor/style.less](/src/components/SQLEditor/style.less) | Less | 45 | 8 | 2 | 55 |
+| [src/constant.ts](/src/constant.ts) | TypeScript | 10 | 8 | 2 | 20 |
+| [src/constants/index.ts](/src/constants/index.ts) | TypeScript | 1 | 0 | 1 | 2 |
+| [src/global.less](/src/global.less) | Less | 610 | 52 | 163 | 825 |
+| [src/menuIcons.js](/src/menuIcons.js) | JavaScript | 33 | 24 | 6 | 63 |
+| [src/models/global.ts](/src/models/global.ts) | TypeScript | 10 | 1 | 3 | 14 |
+| [src/pages/404.tsx](/src/pages/404.tsx) | TypeScript JSX | 15 | 8 | 3 | 26 |
+| [src/pages/Home/index.tsx](/src/pages/Home/index.tsx) | TypeScript JSX | 17 | 9 | 7 | 33 |
+| [src/pages/Home/service.ts](/src/pages/Home/service.ts) | TypeScript | 28 | 11 | 22 | 61 |
+| [src/pages/Home/style.less](/src/pages/Home/style.less) | Less | 77 | 8 | 9 | 94 |
+| [src/pages/baseInfoMana/checkGroupMana/index.tsx](/src/pages/baseInfoMana/checkGroupMana/index.tsx) | TypeScript JSX | 207 | 13 | 42 | 262 |
+| [src/pages/baseInfoMana/checkGroupMana/service.ts](/src/pages/baseInfoMana/checkGroupMana/service.ts) | TypeScript | 60 | 13 | 24 | 97 |
+| [src/pages/baseInfoMana/checkGroupMana/style.less](/src/pages/baseInfoMana/checkGroupMana/style.less) | Less | 37 | 0 | 7 | 44 |
+| [src/pages/baseInfoMana/checkGroupMana/tableSelector.tsx](/src/pages/baseInfoMana/checkGroupMana/tableSelector.tsx) | TypeScript JSX | 85 | 6 | 29 | 120 |
+| [src/pages/baseInfoMana/empMana/index.tsx](/src/pages/baseInfoMana/empMana/index.tsx) | TypeScript JSX | 257 | 15 | 48 | 320 |
+| [src/pages/baseInfoMana/empMana/service.ts](/src/pages/baseInfoMana/empMana/service.ts) | TypeScript | 69 | 14 | 24 | 107 |
+| [src/pages/baseInfoMana/empMana/style.less](/src/pages/baseInfoMana/empMana/style.less) | Less | 66 | 0 | 15 | 81 |
+| [src/pages/baseInfoMana/empMana/tableSelector.tsx](/src/pages/baseInfoMana/empMana/tableSelector.tsx) | TypeScript JSX | 203 | 5 | 42 | 250 |
+| [src/pages/baseInfoMana/empMana/transform.tsx](/src/pages/baseInfoMana/empMana/transform.tsx) | TypeScript JSX | 97 | 19 | 19 | 135 |
+| [src/pages/baseInfoMana/unitMana/index.tsx](/src/pages/baseInfoMana/unitMana/index.tsx) | TypeScript JSX | 207 | 13 | 51 | 271 |
+| [src/pages/baseInfoMana/unitMana/service.ts](/src/pages/baseInfoMana/unitMana/service.ts) | TypeScript | 30 | 12 | 21 | 63 |
+| [src/pages/baseInfoMana/unitMana/style.less](/src/pages/baseInfoMana/unitMana/style.less) | Less | 66 | 0 | 13 | 79 |
+| [src/pages/baseInfoMana/unitMana/tableSelector.tsx](/src/pages/baseInfoMana/unitMana/tableSelector.tsx) | TypeScript JSX | 152 | 6 | 40 | 198 |
+| [src/pages/baseSetting/accountingAccountSet/accountingSubMana/index.tsx](/src/pages/baseSetting/accountingAccountSet/accountingSubMana/index.tsx) | TypeScript JSX | 413 | 11 | 58 | 482 |
+| [src/pages/baseSetting/accountingAccountSet/accountingSubMana/service.ts](/src/pages/baseSetting/accountingAccountSet/accountingSubMana/service.ts) | TypeScript | 39 | 13 | 31 | 83 |
+| [src/pages/baseSetting/accountingAccountSet/accountingSubMana/style.less](/src/pages/baseSetting/accountingAccountSet/accountingSubMana/style.less) | Less | 33 | 4 | 6 | 43 |
+| [src/pages/baseSetting/accountingAccountSet/accountingSubMap/index.tsx](/src/pages/baseSetting/accountingAccountSet/accountingSubMap/index.tsx) | TypeScript JSX | 250 | 16 | 45 | 311 |
+| [src/pages/baseSetting/accountingAccountSet/accountingSubMap/service.ts](/src/pages/baseSetting/accountingAccountSet/accountingSubMap/service.ts) | TypeScript | 19 | 11 | 25 | 55 |
+| [src/pages/baseSetting/accountingAccountSet/accountingSubMap/style.less](/src/pages/baseSetting/accountingAccountSet/accountingSubMap/style.less) | Less | 37 | 0 | 6 | 43 |
+| [src/pages/baseSetting/accountingAccountSet/chargeItemMap/index.tsx](/src/pages/baseSetting/accountingAccountSet/chargeItemMap/index.tsx) | TypeScript JSX | 359 | 14 | 79 | 452 |
+| [src/pages/baseSetting/accountingAccountSet/chargeItemMap/service.ts](/src/pages/baseSetting/accountingAccountSet/chargeItemMap/service.ts) | TypeScript | 39 | 14 | 24 | 77 |
+| [src/pages/baseSetting/accountingAccountSet/chargeItemMap/style.less](/src/pages/baseSetting/accountingAccountSet/chargeItemMap/style.less) | Less | 224 | 1 | 35 | 260 |
+| [src/pages/baseSetting/accountingAccountSet/chargeItemMap/tableSelector.tsx](/src/pages/baseSetting/accountingAccountSet/chargeItemMap/tableSelector.tsx) | TypeScript JSX | 152 | 6 | 43 | 201 |
+| [src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/index.tsx](/src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/index.tsx) | TypeScript JSX | 236 | 12 | 45 | 293 |
+| [src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/service.ts](/src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/service.ts) | TypeScript | 38 | 13 | 30 | 81 |
+| [src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/style.less](/src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/style.less) | Less | 49 | 0 | 8 | 57 |
+| [src/pages/baseSetting/costAllocationSet/allocationLevelSet/index.tsx](/src/pages/baseSetting/costAllocationSet/allocationLevelSet/index.tsx) | TypeScript JSX | 255 | 11 | 45 | 311 |
+| [src/pages/baseSetting/costAllocationSet/allocationLevelSet/service.ts](/src/pages/baseSetting/costAllocationSet/allocationLevelSet/service.ts) | TypeScript | 35 | 12 | 29 | 76 |
+| [src/pages/baseSetting/costAllocationSet/allocationLevelSet/style.less](/src/pages/baseSetting/costAllocationSet/allocationLevelSet/style.less) | Less | 37 | 0 | 6 | 43 |
+| [src/pages/baseSetting/costAllocationSet/allocationParamsMap/editTableModal.tsx](/src/pages/baseSetting/costAllocationSet/allocationParamsMap/editTableModal.tsx) | TypeScript JSX | 161 | 5 | 34 | 200 |
+| [src/pages/baseSetting/costAllocationSet/allocationParamsMap/index.tsx](/src/pages/baseSetting/costAllocationSet/allocationParamsMap/index.tsx) | TypeScript JSX | 359 | 31 | 57 | 447 |
+| [src/pages/baseSetting/costAllocationSet/allocationParamsMap/service.ts](/src/pages/baseSetting/costAllocationSet/allocationParamsMap/service.ts) | TypeScript | 70 | 19 | 47 | 136 |
+| [src/pages/baseSetting/costAllocationSet/allocationParamsMap/style.less](/src/pages/baseSetting/costAllocationSet/allocationParamsMap/style.less) | Less | 78 | 0 | 13 | 91 |
+| [src/pages/baseSetting/costAllocationSet/allocationParamsMap/tableSelector.tsx](/src/pages/baseSetting/costAllocationSet/allocationParamsMap/tableSelector.tsx) | TypeScript JSX | 134 | 7 | 45 | 186 |
+| [src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/index.tsx](/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/index.tsx) | TypeScript JSX | 380 | 9 | 53 | 442 |
+| [src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/service.ts](/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/service.ts) | TypeScript | 47 | 14 | 32 | 93 |
+| [src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/style.less](/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/style.less) | Less | 56 | 1 | 8 | 65 |
+| [src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/index.tsx](/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/index.tsx) | TypeScript JSX | 273 | 10 | 48 | 331 |
+| [src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/service.ts](/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/service.ts) | TypeScript | 44 | 13 | 31 | 88 |
+| [src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/style.less](/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/style.less) | Less | 37 | 0 | 6 | 43 |
+| [src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/transform.tsx](/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/transform.tsx) | TypeScript JSX | 227 | 9 | 46 | 282 |
+| [src/pages/baseSetting/costAllocationSet/idleCostSetting/index.tsx](/src/pages/baseSetting/costAllocationSet/idleCostSetting/index.tsx) | TypeScript JSX | 297 | 66 | 54 | 417 |
+| [src/pages/baseSetting/costAllocationSet/idleCostSetting/service.ts](/src/pages/baseSetting/costAllocationSet/idleCostSetting/service.ts) | TypeScript | 57 | 15 | 33 | 105 |
+| [src/pages/baseSetting/costAllocationSet/idleCostSetting/style.less](/src/pages/baseSetting/costAllocationSet/idleCostSetting/style.less) | Less | 37 | 0 | 6 | 43 |
+| [src/pages/baseSetting/costAllocationSet/revenueImputationSet/index.tsx](/src/pages/baseSetting/costAllocationSet/revenueImputationSet/index.tsx) | TypeScript JSX | 318 | 9 | 45 | 372 |
+| [src/pages/baseSetting/costAllocationSet/revenueImputationSet/service.ts](/src/pages/baseSetting/costAllocationSet/revenueImputationSet/service.ts) | TypeScript | 47 | 14 | 32 | 93 |
+| [src/pages/baseSetting/costAllocationSet/revenueImputationSet/style.less](/src/pages/baseSetting/costAllocationSet/revenueImputationSet/style.less) | Less | 31 | 0 | 4 | 35 |
+| [src/pages/baseSetting/costAllocationSet/revenueImputationSet/transform.tsx](/src/pages/baseSetting/costAllocationSet/revenueImputationSet/transform.tsx) | TypeScript JSX | 125 | 4 | 27 | 156 |
+| [src/pages/baseSetting/otherItemSet/departmentCostCalc/index.tsx](/src/pages/baseSetting/otherItemSet/departmentCostCalc/index.tsx) | TypeScript JSX | 627 | 58 | 136 | 821 |
+| [src/pages/baseSetting/otherItemSet/departmentCostCalc/service.ts](/src/pages/baseSetting/otherItemSet/departmentCostCalc/service.ts) | TypeScript | 74 | 18 | 39 | 131 |
+| [src/pages/baseSetting/otherItemSet/departmentCostCalc/style.less](/src/pages/baseSetting/otherItemSet/departmentCostCalc/style.less) | Less | 151 | 0 | 17 | 168 |
+| [src/pages/baseSetting/otherItemSet/departmentCostCalc/transform.tsx](/src/pages/baseSetting/otherItemSet/departmentCostCalc/transform.tsx) | TypeScript JSX | 234 | 15 | 53 | 302 |
+| [src/pages/baseSetting/otherItemSet/diySqlMana/index.tsx](/src/pages/baseSetting/otherItemSet/diySqlMana/index.tsx) | TypeScript JSX | 317 | 47 | 67 | 431 |
+| [src/pages/baseSetting/otherItemSet/diySqlMana/service.ts](/src/pages/baseSetting/otherItemSet/diySqlMana/service.ts) | TypeScript | 64 | 13 | 33 | 110 |
+| [src/pages/baseSetting/otherItemSet/diySqlMana/style.less](/src/pages/baseSetting/otherItemSet/diySqlMana/style.less) | Less | 81 | 1 | 14 | 96 |
+| [src/pages/baseSetting/otherItemSet/reportItemSet/index.tsx](/src/pages/baseSetting/otherItemSet/reportItemSet/index.tsx) | TypeScript JSX | 517 | 31 | 62 | 610 |
+| [src/pages/baseSetting/otherItemSet/reportItemSet/service.ts](/src/pages/baseSetting/otherItemSet/reportItemSet/service.ts) | TypeScript | 56 | 15 | 33 | 104 |
+| [src/pages/baseSetting/otherItemSet/reportItemSet/style.less](/src/pages/baseSetting/otherItemSet/reportItemSet/style.less) | Less | 58 | 0 | 10 | 68 |
+| [src/pages/baseSetting/otherItemSet/reportItemSet/transform.tsx](/src/pages/baseSetting/otherItemSet/reportItemSet/transform.tsx) | TypeScript JSX | 234 | 17 | 52 | 303 |
+| [src/pages/baseSetting/otherItemSet/reportProjectSetting/index.tsx](/src/pages/baseSetting/otherItemSet/reportProjectSetting/index.tsx) | TypeScript JSX | 277 | 10 | 30 | 317 |
+| [src/pages/baseSetting/otherItemSet/reportProjectSetting/service.js](/src/pages/baseSetting/otherItemSet/reportProjectSetting/service.js) | JavaScript | 30 | 13 | 27 | 70 |
+| [src/pages/baseSetting/otherItemSet/reportProjectSetting/style.less](/src/pages/baseSetting/otherItemSet/reportProjectSetting/style.less) | Less | 77 | 0 | 16 | 93 |
+| [src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/index.tsx](/src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/index.tsx) | TypeScript JSX | 244 | 13 | 45 | 302 |
+| [src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/service.ts](/src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/service.ts) | TypeScript | 36 | 12 | 29 | 77 |
+| [src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/style.less](/src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/style.less) | Less | 37 | 0 | 6 | 43 |
+| [src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/index.tsx](/src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/index.tsx) | TypeScript JSX | 166 | 9 | 34 | 209 |
+| [src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/service.ts](/src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/service.ts) | TypeScript | 33 | 12 | 29 | 74 |
+| [src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/style.less](/src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/style.less) | Less | 30 | 0 | 4 | 34 |
+| [src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/index.tsx](/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/index.tsx) | TypeScript JSX | 484 | 20 | 63 | 567 |
+| [src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/service.ts](/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/service.ts) | TypeScript | 48 | 15 | 35 | 98 |
+| [src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/style.less](/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/style.less) | Less | 49 | 0 | 8 | 57 |
+| [src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/index.tsx](/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/index.tsx) | TypeScript JSX | 187 | 8 | 41 | 236 |
+| [src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/service.ts](/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/service.ts) | TypeScript | 19 | 11 | 9 | 39 |
+| [src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/style.less](/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/style.less) | Less | 49 | 0 | 8 | 57 |
+| [src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/transform.tsx](/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/transform.tsx) | TypeScript JSX | 121 | 3 | 21 | 145 |
+| [src/pages/costAccounting/calcPageTemplate/columns.tsx](/src/pages/costAccounting/calcPageTemplate/columns.tsx) | TypeScript JSX | 963 | 68 | 38 | 1,069 |
+| [src/pages/costAccounting/calcPageTemplate/config.ts](/src/pages/costAccounting/calcPageTemplate/config.ts) | TypeScript | 375 | 8 | 26 | 409 |
+| [src/pages/costAccounting/calcPageTemplate/index.tsx](/src/pages/costAccounting/calcPageTemplate/index.tsx) | TypeScript JSX | 790 | 28 | 125 | 943 |
+| [src/pages/costAccounting/calcPageTemplate/service.ts](/src/pages/costAccounting/calcPageTemplate/service.ts) | TypeScript | 340 | 22 | 40 | 402 |
+| [src/pages/costAccounting/calcPageTemplate/style.less](/src/pages/costAccounting/calcPageTemplate/style.less) | Less | 81 | 0 | 12 | 93 |
+| [src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/index.tsx](/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/index.tsx) | TypeScript JSX | 305 | 17 | 48 | 370 |
+| [src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/service.ts](/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/service.ts) | TypeScript | 65 | 14 | 32 | 111 |
+| [src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/style.less](/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/style.less) | Less | 49 | 0 | 7 | 56 |
+| [src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/index.tsx](/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/index.tsx) | TypeScript JSX | 302 | 17 | 48 | 367 |
+| [src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/service.ts](/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/service.ts) | TypeScript | 60 | 13 | 30 | 103 |
+| [src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/style.less](/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/style.less) | Less | 49 | 0 | 7 | 56 |
+| [src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/index.tsx](/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/index.tsx) | TypeScript JSX | 333 | 21 | 50 | 404 |
+| [src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/service.ts](/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/service.ts) | TypeScript | 60 | 13 | 30 | 103 |
+| [src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/style.less](/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/style.less) | Less | 49 | 0 | 7 | 56 |
+| [src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/index.tsx](/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/index.tsx) | TypeScript JSX | 481 | 22 | 88 | 591 |
+| [src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/service.ts](/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/service.ts) | TypeScript | 85 | 22 | 42 | 149 |
+| [src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/style.less](/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/style.less) | Less | 223 | 0 | 31 | 254 |
+| [src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/tableSelector.tsx](/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/tableSelector.tsx) | TypeScript JSX | 134 | 6 | 43 | 183 |
+| [src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/index.tsx](/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/index.tsx) | TypeScript JSX | 332 | 17 | 47 | 396 |
+| [src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/service.ts](/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/service.ts) | TypeScript | 54 | 13 | 30 | 97 |
+| [src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/style.less](/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/style.less) | Less | 49 | 0 | 7 | 56 |
+| [src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/index.tsx](/src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/index.tsx) | TypeScript JSX | 287 | 9 | 46 | 342 |
+| [src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/service.ts](/src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/service.ts) | TypeScript | 56 | 14 | 31 | 101 |
+| [src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/style.less](/src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/style.less) | Less | 49 | 0 | 8 | 57 |
+| [src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/index.tsx](/src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/index.tsx) | TypeScript JSX | 225 | 16 | 45 | 286 |
+| [src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/service.ts](/src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/service.ts) | TypeScript | 56 | 13 | 30 | 99 |
+| [src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/style.less](/src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/style.less) | Less | 49 | 0 | 8 | 57 |
+| [src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/index.tsx](/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/index.tsx) | TypeScript JSX | 495 | 11 | 81 | 587 |
+| [src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/service.ts](/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/service.ts) | TypeScript | 83 | 20 | 40 | 143 |
+| [src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/style.less](/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/style.less) | Less | 209 | 0 | 30 | 239 |
+| [src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/tableSelector.tsx](/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/tableSelector.tsx) | TypeScript JSX | 152 | 6 | 43 | 201 |
+| [src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/match.tsx](/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/match.tsx) | TypeScript JSX | 455 | 14 | 56 | 525 |
+| [src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/setting.tsx](/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/setting.tsx) | TypeScript JSX | 535 | 15 | 56 | 606 |
+| [src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/style.less](/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/style.less) | Less | 449 | 7 | 66 | 522 |
+| [src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/tableSelector.tsx](/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/tableSelector.tsx) | TypeScript JSX | 145 | 7 | 44 | 196 |
+| [src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/index.tsx](/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/index.tsx) | TypeScript JSX | 492 | 28 | 62 | 582 |
+| [src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/service.ts](/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/service.ts) | TypeScript | 198 | 41 | 62 | 301 |
+| [src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/style.less](/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/style.less) | Less | 153 | 0 | 25 | 178 |
+| [src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/editTableModal.tsx](/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/editTableModal.tsx) | TypeScript JSX | 138 | 5 | 32 | 175 |
+| [src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/index.tsx](/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/index.tsx) | TypeScript JSX | 367 | 11 | 50 | 428 |
+| [src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/service.ts](/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/service.ts) | TypeScript | 75 | 20 | 51 | 146 |
+| [src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/style.less](/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/style.less) | Less | 78 | 0 | 13 | 91 |
+| [src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/tableSelector.tsx](/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/tableSelector.tsx) | TypeScript JSX | 133 | 7 | 45 | 185 |
+| [src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/index.tsx](/src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/index.tsx) | TypeScript JSX | 250 | 11 | 47 | 308 |
+| [src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/service.ts](/src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/service.ts) | TypeScript | 51 | 14 | 31 | 96 |
+| [src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/style.less](/src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/style.less) | Less | 49 | 0 | 7 | 56 |
+| [src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx](/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx) | TypeScript JSX | 391 | 12 | 49 | 452 |
+| [src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/index.tsx](/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/index.tsx) | TypeScript JSX | 364 | 16 | 49 | 429 |
+| [src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/service.ts](/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/service.ts) | TypeScript | 113 | 21 | 49 | 183 |
+| [src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/style.less](/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/style.less) | Less | 212 | 1 | 25 | 238 |
+| [src/pages/costLibraryManagement/reportMana/reportColumnMana/UpDateActBtn.tsx](/src/pages/costLibraryManagement/reportMana/reportColumnMana/UpDateActBtn.tsx) | TypeScript JSX | 329 | 9 | 45 | 383 |
+| [src/pages/costLibraryManagement/reportMana/reportColumnMana/index.tsx](/src/pages/costLibraryManagement/reportMana/reportColumnMana/index.tsx) | TypeScript JSX | 227 | 13 | 49 | 289 |
+| [src/pages/costLibraryManagement/reportMana/reportColumnMana/service.ts](/src/pages/costLibraryManagement/reportMana/reportColumnMana/service.ts) | TypeScript | 100 | 16 | 38 | 154 |
+| [src/pages/costLibraryManagement/reportMana/reportColumnMana/style.less](/src/pages/costLibraryManagement/reportMana/reportColumnMana/style.less) | Less | 64 | 3 | 13 | 80 |
+| [src/pages/costLibraryManagement/reportMana/reportColumnMana/transform.tsx](/src/pages/costLibraryManagement/reportMana/reportColumnMana/transform.tsx) | TypeScript JSX | 110 | 4 | 19 | 133 |
+| [src/pages/costLibraryManagement/reportMana/reportListMana/index.tsx](/src/pages/costLibraryManagement/reportMana/reportListMana/index.tsx) | TypeScript JSX | 460 | 46 | 99 | 605 |
+| [src/pages/costLibraryManagement/reportMana/reportListMana/service.ts](/src/pages/costLibraryManagement/reportMana/reportListMana/service.ts) | TypeScript | 64 | 18 | 36 | 118 |
+| [src/pages/costLibraryManagement/reportMana/reportListMana/style.less](/src/pages/costLibraryManagement/reportMana/reportListMana/style.less) | Less | 223 | 0 | 33 | 256 |
+| [src/pages/costLibraryManagement/reportMana/reportListMana/tableSelector.tsx](/src/pages/costLibraryManagement/reportMana/reportListMana/tableSelector.tsx) | TypeScript JSX | 154 | 6 | 43 | 203 |
+| [src/pages/costLibraryManagement/reportMana/reportNavSet/index.tsx](/src/pages/costLibraryManagement/reportMana/reportNavSet/index.tsx) | TypeScript JSX | 298 | 12 | 50 | 360 |
+| [src/pages/costLibraryManagement/reportMana/reportNavSet/service.ts](/src/pages/costLibraryManagement/reportMana/reportNavSet/service.ts) | TypeScript | 57 | 12 | 31 | 100 |
+| [src/pages/costLibraryManagement/reportMana/reportNavSet/style.less](/src/pages/costLibraryManagement/reportMana/reportNavSet/style.less) | Less | 37 | 0 | 7 | 44 |
+| [src/pages/departmentCostCheck/index.tsx](/src/pages/departmentCostCheck/index.tsx) | TypeScript JSX | 638 | 73 | 135 | 846 |
+| [src/pages/departmentCostCheck/service.ts](/src/pages/departmentCostCheck/service.ts) | TypeScript | 80 | 19 | 41 | 140 |
+| [src/pages/departmentCostCheck/style.less](/src/pages/departmentCostCheck/style.less) | Less | 174 | 0 | 26 | 200 |
+| [src/pages/departmentMenzhuCostCalc/index.tsx](/src/pages/departmentMenzhuCostCalc/index.tsx) | TypeScript JSX | 650 | 239 | 167 | 1,056 |
+| [src/pages/departmentMenzhuCostCalc/service.ts](/src/pages/departmentMenzhuCostCalc/service.ts) | TypeScript | 20 | 11 | 27 | 58 |
+| [src/pages/departmentMenzhuCostCalc/style.less](/src/pages/departmentMenzhuCostCalc/style.less) | Less | 174 | 0 | 26 | 200 |
+| [src/pages/incomeCollectionAction/index.tsx](/src/pages/incomeCollectionAction/index.tsx) | TypeScript JSX | 310 | 11 | 40 | 361 |
+| [src/pages/incomeCollectionAction/service.ts](/src/pages/incomeCollectionAction/service.ts) | TypeScript | 13 | 2 | 9 | 24 |
+| [src/pages/incomeCollectionAction/style.less](/src/pages/incomeCollectionAction/style.less) | Less | 183 | 0 | 31 | 214 |
+| [src/pages/monthlyInfoCollection/components/leftAndRighrStructure.tsx](/src/pages/monthlyInfoCollection/components/leftAndRighrStructure.tsx) | TypeScript JSX | 346 | 14 | 58 | 418 |
+| [src/pages/monthlyInfoCollection/components/style.less](/src/pages/monthlyInfoCollection/components/style.less) | Less | 153 | 0 | 27 | 180 |
+| [src/pages/monthlyInfoCollection/index.tsx](/src/pages/monthlyInfoCollection/index.tsx) | TypeScript JSX | 177 | 13 | 22 | 212 |
+| [src/pages/monthlyInfoCollection/service.ts](/src/pages/monthlyInfoCollection/service.ts) | TypeScript | 66 | 19 | 33 | 118 |
+| [src/pages/monthlyInfoCollection/style.less](/src/pages/monthlyInfoCollection/style.less) | Less | 49 | 0 | 4 | 53 |
+| [src/pages/monthlyInfoCollection/tableSelector.tsx](/src/pages/monthlyInfoCollection/tableSelector.tsx) | TypeScript JSX | 153 | 2 | 38 | 193 |
+| [src/pages/monthlyInfoSearch/empCostDataImport/index.tsx](/src/pages/monthlyInfoSearch/empCostDataImport/index.tsx) | TypeScript JSX | 204 | 15 | 26 | 245 |
+| [src/pages/monthlyInfoSearch/empCostDataImport/service.js](/src/pages/monthlyInfoSearch/empCostDataImport/service.js) | JavaScript | 39 | 13 | 27 | 79 |
+| [src/pages/monthlyInfoSearch/empCostDataImport/style.less](/src/pages/monthlyInfoSearch/empCostDataImport/style.less) | Less | 84 | 0 | 17 | 101 |
+| [src/pages/monthlyInfoSearch/incomeCostDataImport/index.tsx](/src/pages/monthlyInfoSearch/incomeCostDataImport/index.tsx) | TypeScript JSX | 391 | 35 | 56 | 482 |
+| [src/pages/monthlyInfoSearch/incomeCostDataImport/service.js](/src/pages/monthlyInfoSearch/incomeCostDataImport/service.js) | JavaScript | 62 | 16 | 29 | 107 |
+| [src/pages/monthlyInfoSearch/incomeCostDataImport/style.less](/src/pages/monthlyInfoSearch/incomeCostDataImport/style.less) | Less | 74 | 0 | 16 | 90 |
+| [src/pages/monthlyInfoSearch/incomeCostDataImport/test.html](/src/pages/monthlyInfoSearch/incomeCostDataImport/test.html) | HTML | 20 | 0 | 1 | 21 |
+| [src/pages/monthlyInfoSearch/patientChargeItemsImport/index.tsx](/src/pages/monthlyInfoSearch/patientChargeItemsImport/index.tsx) | TypeScript JSX | 288 | 16 | 31 | 335 |
+| [src/pages/monthlyInfoSearch/patientChargeItemsImport/service.js](/src/pages/monthlyInfoSearch/patientChargeItemsImport/service.js) | JavaScript | 45 | 14 | 28 | 87 |
+| [src/pages/monthlyInfoSearch/patientChargeItemsImport/style.less](/src/pages/monthlyInfoSearch/patientChargeItemsImport/style.less) | Less | 91 | 1 | 17 | 109 |
+| [src/pages/monthlyInfoSearch/patientInfoImport/index.tsx](/src/pages/monthlyInfoSearch/patientInfoImport/index.tsx) | TypeScript JSX | 312 | 9 | 32 | 353 |
+| [src/pages/monthlyInfoSearch/patientInfoImport/service.js](/src/pages/monthlyInfoSearch/patientInfoImport/service.js) | JavaScript | 39 | 13 | 27 | 79 |
+| [src/pages/monthlyInfoSearch/patientInfoImport/style.less](/src/pages/monthlyInfoSearch/patientInfoImport/style.less) | Less | 84 | 1 | 16 | 101 |
+| [src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/index.tsx](/src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/index.tsx) | TypeScript JSX | 260 | 29 | 41 | 330 |
+| [src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/service.ts](/src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/service.ts) | TypeScript | 43 | 12 | 29 | 84 |
+| [src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/style.less](/src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/style.less) | Less | 162 | 0 | 27 | 189 |
+| [src/pages/noAccess/index.tsx](/src/pages/noAccess/index.tsx) | TypeScript JSX | 18 | 9 | 4 | 31 |
+| [src/pages/noAccess/style.less](/src/pages/noAccess/style.less) | Less | 45 | 0 | 4 | 49 |
+| [src/pages/reportExport/report/ExportProgressModal.tsx](/src/pages/reportExport/report/ExportProgressModal.tsx) | TypeScript JSX | 41 | 8 | 11 | 60 |
+| [src/pages/reportExport/report/index.tsx](/src/pages/reportExport/report/index.tsx) | TypeScript JSX | 338 | 51 | 122 | 511 |
+| [src/pages/reportExport/report/service.ts](/src/pages/reportExport/report/service.ts) | TypeScript | 21 | 9 | 19 | 49 |
+| [src/pages/reportExport/report/style.less](/src/pages/reportExport/report/style.less) | Less | 80 | 0 | 9 | 89 |
+| [src/pages/setting/fenyeTemplate/index.tsx](/src/pages/setting/fenyeTemplate/index.tsx) | TypeScript JSX | 304 | 13 | 47 | 364 |
+| [src/pages/setting/fenyeTemplate/service.ts](/src/pages/setting/fenyeTemplate/service.ts) | TypeScript | 47 | 12 | 23 | 82 |
+| [src/pages/setting/fenyeTemplate/style.less](/src/pages/setting/fenyeTemplate/style.less) | Less | 37 | 0 | 7 | 44 |
+| [src/pages/setting/qualitativeOptionsMana/index.tsx](/src/pages/setting/qualitativeOptionsMana/index.tsx) | TypeScript JSX | 286 | 9 | 46 | 341 |
+| [src/pages/setting/qualitativeOptionsMana/service.ts](/src/pages/setting/qualitativeOptionsMana/service.ts) | TypeScript | 62 | 14 | 24 | 100 |
+| [src/pages/setting/qualitativeOptionsMana/style.less](/src/pages/setting/qualitativeOptionsMana/style.less) | Less | 37 | 0 | 7 | 44 |
+| [src/pages/specialDataImport/index.tsx](/src/pages/specialDataImport/index.tsx) | TypeScript JSX | 205 | 9 | 37 | 251 |
+| [src/pages/specialDataImport/service.ts](/src/pages/specialDataImport/service.ts) | TypeScript | 33 | 12 | 26 | 71 |
+| [src/pages/specialDataImport/style.less](/src/pages/specialDataImport/style.less) | Less | 50 | 0 | 7 | 57 |
+| [src/pages/static/index.tsx](/src/pages/static/index.tsx) | TypeScript JSX | 59 | 12 | 26 | 97 |
+| [src/pages/static/service.js](/src/pages/static/service.js) | JavaScript | 45 | 14 | 28 | 87 |
+| [src/pages/static/style.less](/src/pages/static/style.less) | Less | 81 | 0 | 16 | 97 |
+| [src/services/auth.ts](/src/services/auth.ts) | TypeScript | 31 | 13 | 12 | 56 |
+| [src/services/demo/UserController.ts](/src/services/demo/UserController.ts) | TypeScript | 74 | 17 | 6 | 97 |
+| [src/services/demo/index.ts](/src/services/demo/index.ts) | TypeScript | 4 | 2 | 2 | 8 |
+| [src/services/demo/typings.d.ts](/src/services/demo/typings.d.ts) | TypeScript | 48 | 10 | 11 | 69 |
+| [src/services/getDic.ts](/src/services/getDic.ts) | TypeScript | 38 | 12 | 26 | 76 |
+| [src/typings.d.ts](/src/typings.d.ts) | TypeScript | 21 | 10 | 3 | 34 |
+| [src/utils/devicePixelRatio.js](/src/utils/devicePixelRatio.js) | JavaScript | 38 | 27 | 2 | 67 |
+| [src/utils/format.ts](/src/utils/format.ts) | TypeScript | 22 | 10 | 5 | 37 |
+| [src/utils/tableToExcel.ts](/src/utils/tableToExcel.ts) | TypeScript | 56 | 22 | 25 | 103 |
+| [src/utils/tableToMultiHeaderExcel.ts](/src/utils/tableToMultiHeaderExcel.ts) | TypeScript | 221 | 10 | 51 | 282 |
+| [src/utils/tooljs.ts](/src/utils/tooljs.ts) | TypeScript | 220 | 39 | 97 | 356 |
+| [src/utils/zhongtaiA.js](/src/utils/zhongtaiA.js) | JavaScript | 1 | 8 | 0 | 9 |
+| [src/utils/zhongtaiB.js](/src/utils/zhongtaiB.js) | JavaScript | 1 | 8 | 0 | 9 |
+| [src/utils/zhongtaiC.js](/src/utils/zhongtaiC.js) | JavaScript | 1 | 8 | 0 | 9 |
+| [tsconfig.json](/tsconfig.json) | JSON with Comments | 3 | 0 | 1 | 4 |
+| [typings.d.ts](/typings.d.ts) | TypeScript | 8 | 8 | 2 | 18 |
+| [yarn-error.log](/yarn-error.log) | Log | 8,469 | 0 | 1,293 | 9,762 |
+
+[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)

+ 61 - 0
.VSCodeCounter/2024-11-05_10-42-46/diff-details.md

@@ -0,0 +1,61 @@
+# Diff Details
+
+Date : 2024-11-05 10:42:46
+
+Directory /Users/dema/work/CostAccountingSys
+
+Total : 46 files,  2249 codes, 242 comments, 510 blanks, all 3001 lines
+
+[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
+
+## Files
+| filename | language | code | comment | blank | total |
+| :--- | :--- | ---: | ---: | ---: | ---: |
+| [.umirc.ts](/.umirc.ts) | TypeScript | 10 | 0 | 0 | 10 |
+| [src/app.tsx](/src/app.tsx) | TypeScript JSX | 24 | -7 | 2 | 19 |
+| [src/components/KCIMLeftList/index.tsx](/src/components/KCIMLeftList/index.tsx) | TypeScript JSX | -1 | 0 | 0 | -1 |
+| [src/global.less](/src/global.less) | Less | 7 | 1 | 2 | 10 |
+| [src/pages/baseSetting/accountingAccountSet/accountingSubMana/index.tsx](/src/pages/baseSetting/accountingAccountSet/accountingSubMana/index.tsx) | TypeScript JSX | 11 | 2 | 5 | 18 |
+| [src/pages/baseSetting/accountingAccountSet/accountingSubMap/index.tsx](/src/pages/baseSetting/accountingAccountSet/accountingSubMap/index.tsx) | TypeScript JSX | 11 | 2 | 4 | 17 |
+| [src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/index.tsx](/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/index.tsx) | TypeScript JSX | 1 | -61 | 1 | -59 |
+| [src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/index.tsx](/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/index.tsx) | TypeScript JSX | 15 | 1 | 2 | 18 |
+| [src/pages/baseSetting/costAllocationSet/revenueImputationSet/index.tsx](/src/pages/baseSetting/costAllocationSet/revenueImputationSet/index.tsx) | TypeScript JSX | 2 | 0 | 0 | 2 |
+| [src/pages/baseSetting/otherItemSet/departmentCostCalc/index.tsx](/src/pages/baseSetting/otherItemSet/departmentCostCalc/index.tsx) | TypeScript JSX | 153 | 14 | 16 | 183 |
+| [src/pages/baseSetting/otherItemSet/departmentCostCalc/style.less](/src/pages/baseSetting/otherItemSet/departmentCostCalc/style.less) | Less | 30 | 0 | 2 | 32 |
+| [src/pages/baseSetting/otherItemSet/departmentCostCalc/transform.tsx](/src/pages/baseSetting/otherItemSet/departmentCostCalc/transform.tsx) | TypeScript JSX | -1 | 0 | 1 | 0 |
+| [src/pages/baseSetting/otherItemSet/reportItemSet/index.tsx](/src/pages/baseSetting/otherItemSet/reportItemSet/index.tsx) | TypeScript JSX | -14 | 13 | 1 | 0 |
+| [src/pages/baseSetting/otherItemSet/reportItemSet/style.less](/src/pages/baseSetting/otherItemSet/reportItemSet/style.less) | Less | 14 | 0 | 3 | 17 |
+| [src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/index.tsx](/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/index.tsx) | TypeScript JSX | 21 | 8 | -1 | 28 |
+| [src/pages/costAccounting/calcPageTemplate/columns.tsx](/src/pages/costAccounting/calcPageTemplate/columns.tsx) | TypeScript JSX | 19 | 20 | 0 | 39 |
+| [src/pages/costAccounting/calcPageTemplate/index.tsx](/src/pages/costAccounting/calcPageTemplate/index.tsx) | TypeScript JSX | 103 | 12 | 31 | 146 |
+| [src/pages/costAccounting/calcPageTemplate/style.less](/src/pages/costAccounting/calcPageTemplate/style.less) | Less | 42 | 0 | 2 | 44 |
+| [src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/index.tsx](/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/index.tsx) | TypeScript JSX | 2 | 0 | 0 | 2 |
+| [src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/index.tsx](/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/index.tsx) | TypeScript JSX | 3 | 0 | 0 | 3 |
+| [src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/index.tsx](/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/index.tsx) | TypeScript JSX | 2 | 0 | 0 | 2 |
+| [src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/index.tsx](/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/index.tsx) | TypeScript JSX | 4 | 0 | 0 | 4 |
+| [src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/index.tsx](/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/index.tsx) | TypeScript JSX | 1 | 0 | 0 | 1 |
+| [src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/editTableModal.tsx](/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/editTableModal.tsx) | TypeScript JSX | -1 | 0 | 0 | -1 |
+| [src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/tableSelector.tsx](/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/tableSelector.tsx) | TypeScript JSX | -1 | 0 | 0 | -1 |
+| [src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx](/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx) | TypeScript JSX | 3 | 0 | 0 | 3 |
+| [src/pages/costLibraryManagement/reportMana/reportListMana/index.tsx](/src/pages/costLibraryManagement/reportMana/reportListMana/index.tsx) | TypeScript JSX | 0 | 27 | 0 | 27 |
+| [src/pages/departmentCostCheck/index.tsx](/src/pages/departmentCostCheck/index.tsx) | TypeScript JSX | 638 | 73 | 135 | 846 |
+| [src/pages/departmentCostCheck/service.ts](/src/pages/departmentCostCheck/service.ts) | TypeScript | 80 | 19 | 41 | 140 |
+| [src/pages/departmentCostCheck/style.less](/src/pages/departmentCostCheck/style.less) | Less | 174 | 0 | 26 | 200 |
+| [src/pages/departmentMenzhuCostCalc/index.tsx](/src/pages/departmentMenzhuCostCalc/index.tsx) | TypeScript JSX | 650 | 239 | 167 | 1,056 |
+| [src/pages/departmentMenzhuCostCalc/service.ts](/src/pages/departmentMenzhuCostCalc/service.ts) | TypeScript | 20 | 11 | 27 | 58 |
+| [src/pages/departmentMenzhuCostCalc/style.less](/src/pages/departmentMenzhuCostCalc/style.less) | Less | 174 | 0 | 26 | 200 |
+| [src/pages/incomeCollectionAction/index.tsx](/src/pages/incomeCollectionAction/index.tsx) | TypeScript JSX | 5 | 0 | 2 | 7 |
+| [src/pages/monthlyInfoCollection/index.tsx](/src/pages/monthlyInfoCollection/index.tsx) | TypeScript JSX | 1 | 0 | 0 | 1 |
+| [src/pages/monthlyInfoSearch/empCostDataImport/index.tsx](/src/pages/monthlyInfoSearch/empCostDataImport/index.tsx) | TypeScript JSX | 4 | -21 | 1 | -16 |
+| [src/pages/monthlyInfoSearch/incomeCostDataImport/index.tsx](/src/pages/monthlyInfoSearch/incomeCostDataImport/index.tsx) | TypeScript JSX | 0 | -21 | 1 | -20 |
+| [src/pages/monthlyInfoSearch/patientChargeItemsImport/index.tsx](/src/pages/monthlyInfoSearch/patientChargeItemsImport/index.tsx) | TypeScript JSX | 4 | -48 | -1 | -45 |
+| [src/pages/monthlyInfoSearch/patientInfoImport/index.tsx](/src/pages/monthlyInfoSearch/patientInfoImport/index.tsx) | TypeScript JSX | 0 | -45 | 1 | -44 |
+| [src/pages/reportExport/report/ExportProgressModal.tsx](/src/pages/reportExport/report/ExportProgressModal.tsx) | TypeScript JSX | -1 | 0 | 0 | -1 |
+| [src/pages/reportExport/report/index.tsx](/src/pages/reportExport/report/index.tsx) | TypeScript JSX | 2 | -1 | 2 | 3 |
+| [src/pages/specialDataImport/index.tsx](/src/pages/specialDataImport/index.tsx) | TypeScript JSX | 1 | 0 | 0 | 1 |
+| [src/pages/static/index.tsx](/src/pages/static/index.tsx) | TypeScript JSX | 5 | 2 | 5 | 12 |
+| [src/services/auth.ts](/src/services/auth.ts) | TypeScript | 5 | 1 | 1 | 7 |
+| [src/utils/format.ts](/src/utils/format.ts) | TypeScript | 13 | 0 | 3 | 16 |
+| [src/utils/tableToExcel.ts](/src/utils/tableToExcel.ts) | TypeScript | 14 | 1 | 2 | 17 |
+
+[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details

+ 48 - 0
.VSCodeCounter/2024-11-05_10-42-46/diff.csv

@@ -0,0 +1,48 @@
+"filename", "language", "TypeScript", "TypeScript JSX", "Less", "comment", "blank", "total"
+"/Users/dema/work/CostAccountingSys/.umirc.ts", "TypeScript", 10, 0, 0, 0, 0, 10
+"/Users/dema/work/CostAccountingSys/src/app.tsx", "TypeScript JSX", 0, 24, 0, -7, 2, 19
+"/Users/dema/work/CostAccountingSys/src/components/KCIMLeftList/index.tsx", "TypeScript JSX", 0, -1, 0, 0, 0, -1
+"/Users/dema/work/CostAccountingSys/src/global.less", "Less", 0, 0, 7, 1, 2, 10
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMana/index.tsx", "TypeScript JSX", 0, 11, 0, 2, 5, 18
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMap/index.tsx", "TypeScript JSX", 0, 11, 0, 2, 4, 17
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/index.tsx", "TypeScript JSX", 0, 1, 0, -61, 1, -59
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/index.tsx", "TypeScript JSX", 0, 15, 0, 1, 2, 18
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/revenueImputationSet/index.tsx", "TypeScript JSX", 0, 2, 0, 0, 0, 2
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/index.tsx", "TypeScript JSX", 0, 153, 0, 14, 16, 183
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/style.less", "Less", 0, 0, 30, 0, 2, 32
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/transform.tsx", "TypeScript JSX", 0, -1, 0, 0, 1, 0
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/index.tsx", "TypeScript JSX", 0, -14, 0, 13, 1, 0
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/style.less", "Less", 0, 0, 14, 0, 3, 17
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/index.tsx", "TypeScript JSX", 0, 21, 0, 8, -1, 28
+"/Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/columns.tsx", "TypeScript JSX", 0, 19, 0, 20, 0, 39
+"/Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/index.tsx", "TypeScript JSX", 0, 103, 0, 12, 31, 146
+"/Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/style.less", "Less", 0, 0, 42, 0, 2, 44
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/index.tsx", "TypeScript JSX", 0, 2, 0, 0, 0, 2
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/index.tsx", "TypeScript JSX", 0, 3, 0, 0, 0, 3
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/index.tsx", "TypeScript JSX", 0, 2, 0, 0, 0, 2
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/index.tsx", "TypeScript JSX", 0, 4, 0, 0, 0, 4
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/index.tsx", "TypeScript JSX", 0, 1, 0, 0, 0, 1
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/editTableModal.tsx", "TypeScript JSX", 0, -1, 0, 0, 0, -1
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/tableSelector.tsx", "TypeScript JSX", 0, -1, 0, 0, 0, -1
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx", "TypeScript JSX", 0, 3, 0, 0, 0, 3
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportListMana/index.tsx", "TypeScript JSX", 0, 0, 0, 27, 0, 27
+"/Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/index.tsx", "TypeScript JSX", 0, 638, 0, 73, 135, 846
+"/Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/service.ts", "TypeScript", 80, 0, 0, 19, 41, 140
+"/Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/style.less", "Less", 0, 0, 174, 0, 26, 200
+"/Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/index.tsx", "TypeScript JSX", 0, 650, 0, 239, 167, 1056
+"/Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/service.ts", "TypeScript", 20, 0, 0, 11, 27, 58
+"/Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/style.less", "Less", 0, 0, 174, 0, 26, 200
+"/Users/dema/work/CostAccountingSys/src/pages/incomeCollectionAction/index.tsx", "TypeScript JSX", 0, 5, 0, 0, 2, 7
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/index.tsx", "TypeScript JSX", 0, 1, 0, 0, 0, 1
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/empCostDataImport/index.tsx", "TypeScript JSX", 0, 4, 0, -21, 1, -16
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/incomeCostDataImport/index.tsx", "TypeScript JSX", 0, 0, 0, -21, 1, -20
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientChargeItemsImport/index.tsx", "TypeScript JSX", 0, 4, 0, -48, -1, -45
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientInfoImport/index.tsx", "TypeScript JSX", 0, 0, 0, -45, 1, -44
+"/Users/dema/work/CostAccountingSys/src/pages/reportExport/report/ExportProgressModal.tsx", "TypeScript JSX", 0, -1, 0, 0, 0, -1
+"/Users/dema/work/CostAccountingSys/src/pages/reportExport/report/index.tsx", "TypeScript JSX", 0, 2, 0, -1, 2, 3
+"/Users/dema/work/CostAccountingSys/src/pages/specialDataImport/index.tsx", "TypeScript JSX", 0, 1, 0, 0, 0, 1
+"/Users/dema/work/CostAccountingSys/src/pages/static/index.tsx", "TypeScript JSX", 0, 5, 0, 2, 5, 12
+"/Users/dema/work/CostAccountingSys/src/services/auth.ts", "TypeScript", 5, 0, 0, 1, 1, 7
+"/Users/dema/work/CostAccountingSys/src/utils/format.ts", "TypeScript", 13, 0, 0, 0, 3, 16
+"/Users/dema/work/CostAccountingSys/src/utils/tableToExcel.ts", "TypeScript", 14, 0, 0, 1, 2, 17
+"Total", "-", 142, 1666, 441, 242, 510, 3001

+ 71 - 0
.VSCodeCounter/2024-11-05_10-42-46/diff.md

@@ -0,0 +1,71 @@
+# Diff Summary
+
+Date : 2024-11-05 10:42:46
+
+Directory /Users/dema/work/CostAccountingSys
+
+Total : 46 files,  2249 codes, 242 comments, 510 blanks, all 3001 lines
+
+[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
+
+## Languages
+| language | files | code | comment | blank | total |
+| :--- | ---: | ---: | ---: | ---: | ---: |
+| TypeScript JSX | 34 | 1,666 | 209 | 375 | 2,250 |
+| Less | 6 | 441 | 1 | 61 | 503 |
+| TypeScript | 6 | 142 | 32 | 74 | 248 |
+
+## Directories
+| path | files | code | comment | blank | total |
+| :--- | ---: | ---: | ---: | ---: | ---: |
+| . | 46 | 2,249 | 242 | 510 | 3,001 |
+| . (Files) | 1 | 10 | 0 | 0 | 10 |
+| src | 45 | 2,239 | 242 | 510 | 2,991 |
+| src (Files) | 2 | 31 | -6 | 4 | 29 |
+| src/components | 1 | -1 | 0 | 0 | -1 |
+| src/components/KCIMLeftList | 1 | -1 | 0 | 0 | -1 |
+| src/pages | 39 | 2,177 | 246 | 500 | 2,923 |
+| src/pages/baseSetting | 11 | 243 | -21 | 34 | 256 |
+| src/pages/baseSetting/accountingAccountSet | 2 | 22 | 4 | 9 | 35 |
+| src/pages/baseSetting/accountingAccountSet/accountingSubMana | 1 | 11 | 2 | 5 | 18 |
+| src/pages/baseSetting/accountingAccountSet/accountingSubMap | 1 | 11 | 2 | 4 | 17 |
+| src/pages/baseSetting/costAllocationSet | 3 | 18 | -60 | 3 | -39 |
+| src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal | 1 | 1 | -61 | 1 | -59 |
+| src/pages/baseSetting/costAllocationSet/costAllocationParamsSet | 1 | 15 | 1 | 2 | 18 |
+| src/pages/baseSetting/costAllocationSet/revenueImputationSet | 1 | 2 | 0 | 0 | 2 |
+| src/pages/baseSetting/otherItemSet | 5 | 182 | 27 | 23 | 232 |
+| src/pages/baseSetting/otherItemSet/departmentCostCalc | 3 | 182 | 14 | 19 | 215 |
+| src/pages/baseSetting/otherItemSet/reportItemSet | 2 | 0 | 13 | 4 | 17 |
+| src/pages/baseSetting/responsibilityCenterSet | 1 | 21 | 8 | -1 | 28 |
+| src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter | 1 | 21 | 8 | -1 | 28 |
+| src/pages/costAccounting | 3 | 164 | 32 | 33 | 229 |
+| src/pages/costAccounting/calcPageTemplate | 3 | 164 | 32 | 33 | 229 |
+| src/pages/costLibraryManagement | 9 | 13 | 27 | 0 | 40 |
+| src/pages/costLibraryManagement/basicCostManagement | 4 | 11 | 0 | 0 | 11 |
+| src/pages/costLibraryManagement/basicCostManagement/drugCostManagement | 1 | 2 | 0 | 0 | 2 |
+| src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement | 1 | 3 | 0 | 0 | 3 |
+| src/pages/costLibraryManagement/basicCostManagement/materialCostManagement | 1 | 2 | 0 | 0 | 2 |
+| src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement | 1 | 4 | 0 | 0 | 4 |
+| src/pages/costLibraryManagement/projectCostManagement | 4 | 2 | 0 | 0 | 2 |
+| src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana | 1 | 1 | 0 | 0 | 1 |
+| src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet | 2 | -2 | 0 | 0 | -2 |
+| src/pages/costLibraryManagement/projectCostManagement/standardProjectMana | 1 | 3 | 0 | 0 | 3 |
+| src/pages/costLibraryManagement/reportMana | 1 | 0 | 27 | 0 | 27 |
+| src/pages/costLibraryManagement/reportMana/reportListMana | 1 | 0 | 27 | 0 | 27 |
+| src/pages/departmentCostCheck | 3 | 892 | 92 | 202 | 1,186 |
+| src/pages/departmentMenzhuCostCalc | 3 | 844 | 250 | 220 | 1,314 |
+| src/pages/incomeCollectionAction | 1 | 5 | 0 | 2 | 7 |
+| src/pages/monthlyInfoCollection | 1 | 1 | 0 | 0 | 1 |
+| src/pages/monthlyInfoSearch | 4 | 8 | -135 | 2 | -125 |
+| src/pages/monthlyInfoSearch/empCostDataImport | 1 | 4 | -21 | 1 | -16 |
+| src/pages/monthlyInfoSearch/incomeCostDataImport | 1 | 0 | -21 | 1 | -20 |
+| src/pages/monthlyInfoSearch/patientChargeItemsImport | 1 | 4 | -48 | -1 | -45 |
+| src/pages/monthlyInfoSearch/patientInfoImport | 1 | 0 | -45 | 1 | -44 |
+| src/pages/reportExport | 2 | 1 | -1 | 2 | 2 |
+| src/pages/reportExport/report | 2 | 1 | -1 | 2 | 2 |
+| src/pages/specialDataImport | 1 | 1 | 0 | 0 | 1 |
+| src/pages/static | 1 | 5 | 2 | 5 | 12 |
+| src/services | 1 | 5 | 1 | 1 | 7 |
+| src/utils | 2 | 27 | 1 | 5 | 33 |
+
+[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)

+ 120 - 0
.VSCodeCounter/2024-11-05_10-42-46/diff.txt

@@ -0,0 +1,120 @@
+Date : 2024-11-05 10:42:46
+Directory : /Users/dema/work/CostAccountingSys
+Total : 46 files,  2249 codes, 242 comments, 510 blanks, all 3001 lines
+
+Languages
++----------------+------------+------------+------------+------------+------------+
+| language       | files      | code       | comment    | blank      | total      |
++----------------+------------+------------+------------+------------+------------+
+| TypeScript JSX |         34 |      1,666 |        209 |        375 |      2,250 |
+| Less           |          6 |        441 |          1 |         61 |        503 |
+| TypeScript     |          6 |        142 |         32 |         74 |        248 |
++----------------+------------+------------+------------+------------+------------+
+
+Directories
++---------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
+| path                                                                                                                            | files      | code       | comment    | blank      | total      |
++---------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
+| .                                                                                                                               |         46 |      2,249 |        242 |        510 |      3,001 |
+| . (Files)                                                                                                                       |          1 |         10 |          0 |          0 |         10 |
+| src                                                                                                                             |         45 |      2,239 |        242 |        510 |      2,991 |
+| src (Files)                                                                                                                     |          2 |         31 |         -6 |          4 |         29 |
+| src/components                                                                                                                  |          1 |         -1 |          0 |          0 |         -1 |
+| src/components/KCIMLeftList                                                                                                     |          1 |         -1 |          0 |          0 |         -1 |
+| src/pages                                                                                                                       |         39 |      2,177 |        246 |        500 |      2,923 |
+| src/pages/baseSetting                                                                                                           |         11 |        243 |        -21 |         34 |        256 |
+| src/pages/baseSetting/accountingAccountSet                                                                                      |          2 |         22 |          4 |          9 |         35 |
+| src/pages/baseSetting/accountingAccountSet/accountingSubMana                                                                    |          1 |         11 |          2 |          5 |         18 |
+| src/pages/baseSetting/accountingAccountSet/accountingSubMap                                                                     |          1 |         11 |          2 |          4 |         17 |
+| src/pages/baseSetting/costAllocationSet                                                                                         |          3 |         18 |        -60 |          3 |        -39 |
+| src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal                                                                |          1 |          1 |        -61 |          1 |        -59 |
+| src/pages/baseSetting/costAllocationSet/costAllocationParamsSet                                                                 |          1 |         15 |          1 |          2 |         18 |
+| src/pages/baseSetting/costAllocationSet/revenueImputationSet                                                                    |          1 |          2 |          0 |          0 |          2 |
+| src/pages/baseSetting/otherItemSet                                                                                              |          5 |        182 |         27 |         23 |        232 |
+| src/pages/baseSetting/otherItemSet/departmentCostCalc                                                                           |          3 |        182 |         14 |         19 |        215 |
+| src/pages/baseSetting/otherItemSet/reportItemSet                                                                                |          2 |          0 |         13 |          4 |         17 |
+| src/pages/baseSetting/responsibilityCenterSet                                                                                   |          1 |         21 |          8 |         -1 |         28 |
+| src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter                                                              |          1 |         21 |          8 |         -1 |         28 |
+| src/pages/costAccounting                                                                                                        |          3 |        164 |         32 |         33 |        229 |
+| src/pages/costAccounting/calcPageTemplate                                                                                       |          3 |        164 |         32 |         33 |        229 |
+| src/pages/costLibraryManagement                                                                                                 |          9 |         13 |         27 |          0 |         40 |
+| src/pages/costLibraryManagement/basicCostManagement                                                                             |          4 |         11 |          0 |          0 |         11 |
+| src/pages/costLibraryManagement/basicCostManagement/drugCostManagement                                                          |          1 |          2 |          0 |          0 |          2 |
+| src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement                                                     |          1 |          3 |          0 |          0 |          3 |
+| src/pages/costLibraryManagement/basicCostManagement/materialCostManagement                                                      |          1 |          2 |          0 |          0 |          2 |
+| src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement                                                         |          1 |          4 |          0 |          0 |          4 |
+| src/pages/costLibraryManagement/projectCostManagement                                                                           |          4 |          2 |          0 |          0 |          2 |
+| src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana                                                           |          1 |          1 |          0 |          0 |          1 |
+| src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet                                                       |          2 |         -2 |          0 |          0 |         -2 |
+| src/pages/costLibraryManagement/projectCostManagement/standardProjectMana                                                       |          1 |          3 |          0 |          0 |          3 |
+| src/pages/costLibraryManagement/reportMana                                                                                      |          1 |          0 |         27 |          0 |         27 |
+| src/pages/costLibraryManagement/reportMana/reportListMana                                                                       |          1 |          0 |         27 |          0 |         27 |
+| src/pages/departmentCostCheck                                                                                                   |          3 |        892 |         92 |        202 |      1,186 |
+| src/pages/departmentMenzhuCostCalc                                                                                              |          3 |        844 |        250 |        220 |      1,314 |
+| src/pages/incomeCollectionAction                                                                                                |          1 |          5 |          0 |          2 |          7 |
+| src/pages/monthlyInfoCollection                                                                                                 |          1 |          1 |          0 |          0 |          1 |
+| src/pages/monthlyInfoSearch                                                                                                     |          4 |          8 |       -135 |          2 |       -125 |
+| src/pages/monthlyInfoSearch/empCostDataImport                                                                                   |          1 |          4 |        -21 |          1 |        -16 |
+| src/pages/monthlyInfoSearch/incomeCostDataImport                                                                                |          1 |          0 |        -21 |          1 |        -20 |
+| src/pages/monthlyInfoSearch/patientChargeItemsImport                                                                            |          1 |          4 |        -48 |         -1 |        -45 |
+| src/pages/monthlyInfoSearch/patientInfoImport                                                                                   |          1 |          0 |        -45 |          1 |        -44 |
+| src/pages/reportExport                                                                                                          |          2 |          1 |         -1 |          2 |          2 |
+| src/pages/reportExport/report                                                                                                   |          2 |          1 |         -1 |          2 |          2 |
+| src/pages/specialDataImport                                                                                                     |          1 |          1 |          0 |          0 |          1 |
+| src/pages/static                                                                                                                |          1 |          5 |          2 |          5 |         12 |
+| src/services                                                                                                                    |          1 |          5 |          1 |          1 |          7 |
+| src/utils                                                                                                                       |          2 |         27 |          1 |          5 |         33 |
++---------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
+
+Files
++---------------------------------------------------------------------------------------------------------------------------------+----------------+------------+------------+------------+------------+
+| filename                                                                                                                        | language       | code       | comment    | blank      | total      |
++---------------------------------------------------------------------------------------------------------------------------------+----------------+------------+------------+------------+------------+
+| /Users/dema/work/CostAccountingSys/.umirc.ts                                                                                    | TypeScript     |         10 |          0 |          0 |         10 |
+| /Users/dema/work/CostAccountingSys/src/app.tsx                                                                                  | TypeScript JSX |         24 |         -7 |          2 |         19 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMLeftList/index.tsx                                                        | TypeScript JSX |         -1 |          0 |          0 |         -1 |
+| /Users/dema/work/CostAccountingSys/src/global.less                                                                              | Less           |          7 |          1 |          2 |         10 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMana/index.tsx                       | TypeScript JSX |         11 |          2 |          5 |         18 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMap/index.tsx                        | TypeScript JSX |         11 |          2 |          4 |         17 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/index.tsx                   | TypeScript JSX |          1 |        -61 |          1 |        -59 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/index.tsx                    | TypeScript JSX |         15 |          1 |          2 |         18 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/revenueImputationSet/index.tsx                       | TypeScript JSX |          2 |          0 |          0 |          2 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/index.tsx                              | TypeScript JSX |        153 |         14 |         16 |        183 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/style.less                             | Less           |         30 |          0 |          2 |         32 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/transform.tsx                          | TypeScript JSX |         -1 |          0 |          1 |          0 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/index.tsx                                   | TypeScript JSX |        -14 |         13 |          1 |          0 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/style.less                                  | Less           |         14 |          0 |          3 |         17 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/index.tsx                 | TypeScript JSX |         21 |          8 |         -1 |         28 |
+| /Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/columns.tsx                                        | TypeScript JSX |         19 |         20 |          0 |         39 |
+| /Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/index.tsx                                          | TypeScript JSX |        103 |         12 |         31 |        146 |
+| /Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/style.less                                         | Less           |         42 |          0 |          2 |         44 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/index.tsx             | TypeScript JSX |          2 |          0 |          0 |          2 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/index.tsx        | TypeScript JSX |          3 |          0 |          0 |          3 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/index.tsx         | TypeScript JSX |          2 |          0 |          0 |          2 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/index.tsx            | TypeScript JSX |          4 |          0 |          0 |          4 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/index.tsx              | TypeScript JSX |          1 |          0 |          0 |          1 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/editTableModal.tsx | TypeScript JSX |         -1 |          0 |          0 |         -1 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/tableSelector.tsx  | TypeScript JSX |         -1 |          0 |          0 |         -1 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx         | TypeScript JSX |          3 |          0 |          0 |          3 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportListMana/index.tsx                          | TypeScript JSX |          0 |         27 |          0 |         27 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/index.tsx                                                      | TypeScript JSX |        638 |         73 |        135 |        846 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/service.ts                                                     | TypeScript     |         80 |         19 |         41 |        140 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/style.less                                                     | Less           |        174 |          0 |         26 |        200 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/index.tsx                                                 | TypeScript JSX |        650 |        239 |        167 |      1,056 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/service.ts                                                | TypeScript     |         20 |         11 |         27 |         58 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/style.less                                                | Less           |        174 |          0 |         26 |        200 |
+| /Users/dema/work/CostAccountingSys/src/pages/incomeCollectionAction/index.tsx                                                   | TypeScript JSX |          5 |          0 |          2 |          7 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/index.tsx                                                    | TypeScript JSX |          1 |          0 |          0 |          1 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/empCostDataImport/index.tsx                                      | TypeScript JSX |          4 |        -21 |          1 |        -16 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/incomeCostDataImport/index.tsx                                   | TypeScript JSX |          0 |        -21 |          1 |        -20 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientChargeItemsImport/index.tsx                               | TypeScript JSX |          4 |        -48 |         -1 |        -45 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientInfoImport/index.tsx                                      | TypeScript JSX |          0 |        -45 |          1 |        -44 |
+| /Users/dema/work/CostAccountingSys/src/pages/reportExport/report/ExportProgressModal.tsx                                        | TypeScript JSX |         -1 |          0 |          0 |         -1 |
+| /Users/dema/work/CostAccountingSys/src/pages/reportExport/report/index.tsx                                                      | TypeScript JSX |          2 |         -1 |          2 |          3 |
+| /Users/dema/work/CostAccountingSys/src/pages/specialDataImport/index.tsx                                                        | TypeScript JSX |          1 |          0 |          0 |          1 |
+| /Users/dema/work/CostAccountingSys/src/pages/static/index.tsx                                                                   | TypeScript JSX |          5 |          2 |          5 |         12 |
+| /Users/dema/work/CostAccountingSys/src/services/auth.ts                                                                         | TypeScript     |          5 |          1 |          1 |          7 |
+| /Users/dema/work/CostAccountingSys/src/utils/format.ts                                                                          | TypeScript     |         13 |          0 |          3 |         16 |
+| /Users/dema/work/CostAccountingSys/src/utils/tableToExcel.ts                                                                    | TypeScript     |         14 |          1 |          2 |         17 |
+| Total                                                                                                                           |                |      2,249 |        242 |        510 |      3,001 |
++---------------------------------------------------------------------------------------------------------------------------------+----------------+------------+------------+------------+------------+

+ 252 - 0
.VSCodeCounter/2024-11-05_10-42-46/results.csv

@@ -0,0 +1,252 @@
+"filename", "language", "TypeScript", "TypeScript JSX", "Less", "JavaScript", "HTML", "JSON with Comments", "JSON", "Markdown", "Ignore", "Log", "comment", "blank", "total"
+"/Users/dema/work/CostAccountingSys/.eslintrc.js", "JavaScript", 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 4
+"/Users/dema/work/CostAccountingSys/.prettierignore", "Ignore", 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 4
+"/Users/dema/work/CostAccountingSys/.prettierrc", "JSON", 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1, 9
+"/Users/dema/work/CostAccountingSys/.stylelintrc.js", "JavaScript", 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 4
+"/Users/dema/work/CostAccountingSys/.umirc.ts", "TypeScript", 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 15, 418
+"/Users/dema/work/CostAccountingSys/README.md", "Markdown", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 4
+"/Users/dema/work/CostAccountingSys/config/proxy.ts", "TypeScript", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 12
+"/Users/dema/work/CostAccountingSys/mock/home.ts", "TypeScript", 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 5, 60
+"/Users/dema/work/CostAccountingSys/mock/monthlyData.ts", "TypeScript", 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 78, 242
+"/Users/dema/work/CostAccountingSys/mock/monthlyInfo.ts", "TypeScript", 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 50, 205
+"/Users/dema/work/CostAccountingSys/mock/monthlySet.ts", "TypeScript", 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 3, 54
+"/Users/dema/work/CostAccountingSys/mock/userAPI.ts", "TypeScript", 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 21
+"/Users/dema/work/CostAccountingSys/package.json", "JSON", 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 1, 48
+"/Users/dema/work/CostAccountingSys/src/access.ts", "TypeScript", 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 22, 79
+"/Users/dema/work/CostAccountingSys/src/app.tsx", "TypeScript JSX", 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 64, 119, 602
+"/Users/dema/work/CostAccountingSys/src/authWrapper.tsx", "TypeScript JSX", 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 65
+"/Users/dema/work/CostAccountingSys/src/components/Guide/Guide.less", "Less", 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5
+"/Users/dema/work/CostAccountingSys/src/components/Guide/Guide.tsx", "TypeScript JSX", 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 24
+"/Users/dema/work/CostAccountingSys/src/components/Guide/index.ts", "TypeScript", 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3
+"/Users/dema/work/CostAccountingSys/src/components/KCIMDrawerForm/index.tsx", "TypeScript JSX", 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 9, 8, 23
+"/Users/dema/work/CostAccountingSys/src/components/KCIMDrawerForm/style.less", "Less", 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 3, 20
+"/Users/dema/work/CostAccountingSys/src/components/KCIMLeftList/index.tsx", "TypeScript JSX", 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 61, 51, 280
+"/Users/dema/work/CostAccountingSys/src/components/KCIMLeftList/style.less", "Less", 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 8, 20, 138
+"/Users/dema/work/CostAccountingSys/src/components/KCIMModalForm/index.tsx", "TypeScript JSX", 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 8, 11, 42
+"/Users/dema/work/CostAccountingSys/src/components/KCIMPageContainer/index.tsx", "TypeScript JSX", 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 8, 18, 101
+"/Users/dema/work/CostAccountingSys/src/components/KCIMPageContainer/style.less", "Less", 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 19, 138
+"/Users/dema/work/CostAccountingSys/src/components/KCIMTable/index.tsx", "TypeScript JSX", 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 11, 15, 66
+"/Users/dema/work/CostAccountingSys/src/components/KCIMTable/style.less", "Less", 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 8, 50, 237
+"/Users/dema/work/CostAccountingSys/src/components/KCIMTableSelector/index.tsx", "TypeScript JSX", 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 10, 40, 194
+"/Users/dema/work/CostAccountingSys/src/components/KCIMTableSelector/style.less", "Less", 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 4, 33
+"/Users/dema/work/CostAccountingSys/src/components/KCIMUpload/index.tsx", "TypeScript JSX", 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 9, 14, 79
+"/Users/dema/work/CostAccountingSys/src/components/KCIMUpload/style.less", "Less", 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 5, 31
+"/Users/dema/work/CostAccountingSys/src/components/ProgressModal/index.tsx", "TypeScript JSX", 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 8, 11, 93
+"/Users/dema/work/CostAccountingSys/src/components/ProgressModal/service.ts", "TypeScript", 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 34
+"/Users/dema/work/CostAccountingSys/src/components/ResizableContainer/index.tsx", "TypeScript JSX", 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 8, 10, 72
+"/Users/dema/work/CostAccountingSys/src/components/ResizableContainer/style.less", "Less", 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 7, 25
+"/Users/dema/work/CostAccountingSys/src/components/SQLEditor/index.tsx", "TypeScript JSX", 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 10, 15, 133
+"/Users/dema/work/CostAccountingSys/src/components/SQLEditor/style.less", "Less", 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 8, 2, 55
+"/Users/dema/work/CostAccountingSys/src/constant.ts", "TypeScript", 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 20
+"/Users/dema/work/CostAccountingSys/src/constants/index.ts", "TypeScript", 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2
+"/Users/dema/work/CostAccountingSys/src/global.less", "Less", 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 52, 163, 825
+"/Users/dema/work/CostAccountingSys/src/menuIcons.js", "JavaScript", 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 24, 6, 63
+"/Users/dema/work/CostAccountingSys/src/models/global.ts", "TypeScript", 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 14
+"/Users/dema/work/CostAccountingSys/src/pages/404.tsx", "TypeScript JSX", 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 8, 3, 26
+"/Users/dema/work/CostAccountingSys/src/pages/Home/index.tsx", "TypeScript JSX", 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 33
+"/Users/dema/work/CostAccountingSys/src/pages/Home/service.ts", "TypeScript", 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 22, 61
+"/Users/dema/work/CostAccountingSys/src/pages/Home/style.less", "Less", 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 8, 9, 94
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/checkGroupMana/index.tsx", "TypeScript JSX", 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 13, 42, 262
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/checkGroupMana/service.ts", "TypeScript", 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 24, 97
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/checkGroupMana/style.less", "Less", 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 7, 44
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/checkGroupMana/tableSelector.tsx", "TypeScript JSX", 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 6, 29, 120
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/empMana/index.tsx", "TypeScript JSX", 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 15, 48, 320
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/empMana/service.ts", "TypeScript", 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 24, 107
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/empMana/style.less", "Less", 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 15, 81
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/empMana/tableSelector.tsx", "TypeScript JSX", 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 5, 42, 250
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/empMana/transform.tsx", "TypeScript JSX", 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 135
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/unitMana/index.tsx", "TypeScript JSX", 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 13, 51, 271
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/unitMana/service.ts", "TypeScript", 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 21, 63
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/unitMana/style.less", "Less", 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 13, 79
+"/Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/unitMana/tableSelector.tsx", "TypeScript JSX", 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 6, 40, 198
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMana/index.tsx", "TypeScript JSX", 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 11, 58, 482
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMana/service.ts", "TypeScript", 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 31, 83
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMana/style.less", "Less", 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 4, 6, 43
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMap/index.tsx", "TypeScript JSX", 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 16, 45, 311
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMap/service.ts", "TypeScript", 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 25, 55
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMap/style.less", "Less", 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/chargeItemMap/index.tsx", "TypeScript JSX", 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 14, 79, 452
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/chargeItemMap/service.ts", "TypeScript", 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 24, 77
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/chargeItemMap/style.less", "Less", 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 1, 35, 260
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/chargeItemMap/tableSelector.tsx", "TypeScript JSX", 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43, 201
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/index.tsx", "TypeScript JSX", 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 12, 45, 293
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/service.ts", "TypeScript", 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 30, 81
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 8, 57
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationLevelSet/index.tsx", "TypeScript JSX", 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 11, 45, 311
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationLevelSet/service.ts", "TypeScript", 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 29, 76
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationLevelSet/style.less", "Less", 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationParamsMap/editTableModal.tsx", "TypeScript JSX", 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 5, 34, 200
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationParamsMap/index.tsx", "TypeScript JSX", 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 31, 57, 447
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationParamsMap/service.ts", "TypeScript", 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 47, 136
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationParamsMap/style.less", "Less", 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 13, 91
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationParamsMap/tableSelector.tsx", "TypeScript JSX", 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 7, 45, 186
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/index.tsx", "TypeScript JSX", 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 9, 53, 442
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/service.ts", "TypeScript", 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 32, 93
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/style.less", "Less", 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 1, 8, 65
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/index.tsx", "TypeScript JSX", 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 10, 48, 331
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/service.ts", "TypeScript", 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 31, 88
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/style.less", "Less", 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/transform.tsx", "TypeScript JSX", 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 9, 46, 282
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/idleCostSetting/index.tsx", "TypeScript JSX", 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 66, 54, 417
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/idleCostSetting/service.ts", "TypeScript", 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 33, 105
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/idleCostSetting/style.less", "Less", 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/revenueImputationSet/index.tsx", "TypeScript JSX", 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 9, 45, 372
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/revenueImputationSet/service.ts", "TypeScript", 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 32, 93
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/revenueImputationSet/style.less", "Less", 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 4, 35
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/revenueImputationSet/transform.tsx", "TypeScript JSX", 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 4, 27, 156
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/index.tsx", "TypeScript JSX", 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 58, 136, 821
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/service.ts", "TypeScript", 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 39, 131
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/style.less", "Less", 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 17, 168
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/transform.tsx", "TypeScript JSX", 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 15, 53, 302
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/diySqlMana/index.tsx", "TypeScript JSX", 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 47, 67, 431
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/diySqlMana/service.ts", "TypeScript", 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 33, 110
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/diySqlMana/style.less", "Less", 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 1, 14, 96
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/index.tsx", "TypeScript JSX", 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 31, 62, 610
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/service.ts", "TypeScript", 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 33, 104
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/style.less", "Less", 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 10, 68
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/transform.tsx", "TypeScript JSX", 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 17, 52, 303
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportProjectSetting/index.tsx", "TypeScript JSX", 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 10, 30, 317
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportProjectSetting/service.js", "JavaScript", 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 13, 27, 70
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportProjectSetting/style.less", "Less", 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 16, 93
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/index.tsx", "TypeScript JSX", 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 13, 45, 302
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/service.ts", "TypeScript", 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 29, 77
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/style.less", "Less", 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/index.tsx", "TypeScript JSX", 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 9, 34, 209
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/service.ts", "TypeScript", 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 29, 74
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/style.less", "Less", 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 4, 34
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/index.tsx", "TypeScript JSX", 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 20, 63, 567
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/service.ts", "TypeScript", 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 35, 98
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 8, 57
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/index.tsx", "TypeScript JSX", 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 8, 41, 236
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/service.ts", "TypeScript", 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 9, 39
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 8, 57
+"/Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/transform.tsx", "TypeScript JSX", 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 3, 21, 145
+"/Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/columns.tsx", "TypeScript JSX", 0, 963, 0, 0, 0, 0, 0, 0, 0, 0, 68, 38, 1069
+"/Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/config.ts", "TypeScript", 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 26, 409
+"/Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/index.tsx", "TypeScript JSX", 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 28, 125, 943
+"/Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/service.ts", "TypeScript", 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 40, 402
+"/Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/style.less", "Less", 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 12, 93
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/index.tsx", "TypeScript JSX", 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 17, 48, 370
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/service.ts", "TypeScript", 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 32, 111
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 7, 56
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/index.tsx", "TypeScript JSX", 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 17, 48, 367
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/service.ts", "TypeScript", 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 30, 103
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 7, 56
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/index.tsx", "TypeScript JSX", 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 21, 50, 404
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/service.ts", "TypeScript", 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 30, 103
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 7, 56
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/index.tsx", "TypeScript JSX", 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 22, 88, 591
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/service.ts", "TypeScript", 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 42, 149
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/style.less", "Less", 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 31, 254
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/tableSelector.tsx", "TypeScript JSX", 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43, 183
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/index.tsx", "TypeScript JSX", 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 17, 47, 396
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/service.ts", "TypeScript", 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 30, 97
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 7, 56
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/index.tsx", "TypeScript JSX", 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 9, 46, 342
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/service.ts", "TypeScript", 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 31, 101
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 8, 57
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/index.tsx", "TypeScript JSX", 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 16, 45, 286
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/service.ts", "TypeScript", 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 30, 99
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 8, 57
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/index.tsx", "TypeScript JSX", 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 11, 81, 587
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/service.ts", "TypeScript", 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 40, 143
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/style.less", "Less", 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 30, 239
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/tableSelector.tsx", "TypeScript JSX", 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43, 201
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/match.tsx", "TypeScript JSX", 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 14, 56, 525
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/setting.tsx", "TypeScript JSX", 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 15, 56, 606
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/style.less", "Less", 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 7, 66, 522
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/tableSelector.tsx", "TypeScript JSX", 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 7, 44, 196
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/index.tsx", "TypeScript JSX", 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 28, 62, 582
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/service.ts", "TypeScript", 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 62, 301
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/style.less", "Less", 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 25, 178
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/editTableModal.tsx", "TypeScript JSX", 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 5, 32, 175
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/index.tsx", "TypeScript JSX", 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 11, 50, 428
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/service.ts", "TypeScript", 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 51, 146
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/style.less", "Less", 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 13, 91
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/tableSelector.tsx", "TypeScript JSX", 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 7, 45, 185
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/index.tsx", "TypeScript JSX", 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 11, 47, 308
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/service.ts", "TypeScript", 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 31, 96
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 7, 56
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx", "TypeScript JSX", 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 12, 49, 452
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/index.tsx", "TypeScript JSX", 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 16, 49, 429
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/service.ts", "TypeScript", 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 49, 183
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/style.less", "Less", 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 1, 25, 238
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportColumnMana/UpDateActBtn.tsx", "TypeScript JSX", 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 9, 45, 383
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportColumnMana/index.tsx", "TypeScript JSX", 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 13, 49, 289
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportColumnMana/service.ts", "TypeScript", 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 38, 154
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportColumnMana/style.less", "Less", 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 3, 13, 80
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportColumnMana/transform.tsx", "TypeScript JSX", 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 4, 19, 133
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportListMana/index.tsx", "TypeScript JSX", 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 46, 99, 605
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportListMana/service.ts", "TypeScript", 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 36, 118
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportListMana/style.less", "Less", 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 33, 256
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportListMana/tableSelector.tsx", "TypeScript JSX", 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 6, 43, 203
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportNavSet/index.tsx", "TypeScript JSX", 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 12, 50, 360
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportNavSet/service.ts", "TypeScript", 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 31, 100
+"/Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportNavSet/style.less", "Less", 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 7, 44
+"/Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/index.tsx", "TypeScript JSX", 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 73, 135, 846
+"/Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/service.ts", "TypeScript", 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 41, 140
+"/Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/style.less", "Less", 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 26, 200
+"/Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/index.tsx", "TypeScript JSX", 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 239, 167, 1056
+"/Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/service.ts", "TypeScript", 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 27, 58
+"/Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/style.less", "Less", 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 26, 200
+"/Users/dema/work/CostAccountingSys/src/pages/incomeCollectionAction/index.tsx", "TypeScript JSX", 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 11, 40, 361
+"/Users/dema/work/CostAccountingSys/src/pages/incomeCollectionAction/service.ts", "TypeScript", 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9, 24
+"/Users/dema/work/CostAccountingSys/src/pages/incomeCollectionAction/style.less", "Less", 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 31, 214
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/components/leftAndRighrStructure.tsx", "TypeScript JSX", 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 14, 58, 418
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/components/style.less", "Less", 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 27, 180
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/index.tsx", "TypeScript JSX", 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 13, 22, 212
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/service.ts", "TypeScript", 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 33, 118
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/style.less", "Less", 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 4, 53
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/tableSelector.tsx", "TypeScript JSX", 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 2, 38, 193
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/empCostDataImport/index.tsx", "TypeScript JSX", 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 15, 26, 245
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/empCostDataImport/service.js", "JavaScript", 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 13, 27, 79
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/empCostDataImport/style.less", "Less", 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 17, 101
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/incomeCostDataImport/index.tsx", "TypeScript JSX", 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 35, 56, 482
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/incomeCostDataImport/service.js", "JavaScript", 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 16, 29, 107
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/incomeCostDataImport/style.less", "Less", 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 16, 90
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/incomeCostDataImport/test.html", "HTML", 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 1, 21
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientChargeItemsImport/index.tsx", "TypeScript JSX", 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 16, 31, 335
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientChargeItemsImport/service.js", "JavaScript", 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 14, 28, 87
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientChargeItemsImport/style.less", "Less", 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 1, 17, 109
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientInfoImport/index.tsx", "TypeScript JSX", 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 9, 32, 353
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientInfoImport/service.js", "JavaScript", 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 13, 27, 79
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientInfoImport/style.less", "Less", 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 1, 16, 101
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/index.tsx", "TypeScript JSX", 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 29, 41, 330
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/service.ts", "TypeScript", 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 29, 84
+"/Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/style.less", "Less", 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 27, 189
+"/Users/dema/work/CostAccountingSys/src/pages/noAccess/index.tsx", "TypeScript JSX", 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 9, 4, 31
+"/Users/dema/work/CostAccountingSys/src/pages/noAccess/style.less", "Less", 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 4, 49
+"/Users/dema/work/CostAccountingSys/src/pages/reportExport/report/ExportProgressModal.tsx", "TypeScript JSX", 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 8, 11, 60
+"/Users/dema/work/CostAccountingSys/src/pages/reportExport/report/index.tsx", "TypeScript JSX", 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 51, 122, 511
+"/Users/dema/work/CostAccountingSys/src/pages/reportExport/report/service.ts", "TypeScript", 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 19, 49
+"/Users/dema/work/CostAccountingSys/src/pages/reportExport/report/style.less", "Less", 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 9, 89
+"/Users/dema/work/CostAccountingSys/src/pages/setting/fenyeTemplate/index.tsx", "TypeScript JSX", 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 13, 47, 364
+"/Users/dema/work/CostAccountingSys/src/pages/setting/fenyeTemplate/service.ts", "TypeScript", 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 23, 82
+"/Users/dema/work/CostAccountingSys/src/pages/setting/fenyeTemplate/style.less", "Less", 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 7, 44
+"/Users/dema/work/CostAccountingSys/src/pages/setting/qualitativeOptionsMana/index.tsx", "TypeScript JSX", 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 9, 46, 341
+"/Users/dema/work/CostAccountingSys/src/pages/setting/qualitativeOptionsMana/service.ts", "TypeScript", 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 24, 100
+"/Users/dema/work/CostAccountingSys/src/pages/setting/qualitativeOptionsMana/style.less", "Less", 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 7, 44
+"/Users/dema/work/CostAccountingSys/src/pages/specialDataImport/index.tsx", "TypeScript JSX", 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 9, 37, 251
+"/Users/dema/work/CostAccountingSys/src/pages/specialDataImport/service.ts", "TypeScript", 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 26, 71
+"/Users/dema/work/CostAccountingSys/src/pages/specialDataImport/style.less", "Less", 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 7, 57
+"/Users/dema/work/CostAccountingSys/src/pages/static/index.tsx", "TypeScript JSX", 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 12, 26, 97
+"/Users/dema/work/CostAccountingSys/src/pages/static/service.js", "JavaScript", 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 14, 28, 87
+"/Users/dema/work/CostAccountingSys/src/pages/static/style.less", "Less", 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 16, 97
+"/Users/dema/work/CostAccountingSys/src/services/auth.ts", "TypeScript", 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 12, 56
+"/Users/dema/work/CostAccountingSys/src/services/demo/UserController.ts", "TypeScript", 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 6, 97
+"/Users/dema/work/CostAccountingSys/src/services/demo/index.ts", "TypeScript", 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 8
+"/Users/dema/work/CostAccountingSys/src/services/demo/typings.d.ts", "TypeScript", 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 69
+"/Users/dema/work/CostAccountingSys/src/services/getDic.ts", "TypeScript", 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 26, 76
+"/Users/dema/work/CostAccountingSys/src/typings.d.ts", "TypeScript", 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 34
+"/Users/dema/work/CostAccountingSys/src/utils/devicePixelRatio.js", "JavaScript", 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 27, 2, 67
+"/Users/dema/work/CostAccountingSys/src/utils/format.ts", "TypeScript", 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 5, 37
+"/Users/dema/work/CostAccountingSys/src/utils/tableToExcel.ts", "TypeScript", 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 25, 103
+"/Users/dema/work/CostAccountingSys/src/utils/tableToMultiHeaderExcel.ts", "TypeScript", 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 51, 282
+"/Users/dema/work/CostAccountingSys/src/utils/tooljs.ts", "TypeScript", 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 97, 356
+"/Users/dema/work/CostAccountingSys/src/utils/zhongtaiA.js", "JavaScript", 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8, 0, 9
+"/Users/dema/work/CostAccountingSys/src/utils/zhongtaiB.js", "JavaScript", 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8, 0, 9
+"/Users/dema/work/CostAccountingSys/src/utils/zhongtaiC.js", "JavaScript", 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8, 0, 9
+"/Users/dema/work/CostAccountingSys/tsconfig.json", "JSON with Comments", 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 4
+"/Users/dema/work/CostAccountingSys/typings.d.ts", "TypeScript", 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 18
+"/Users/dema/work/CostAccountingSys/yarn-error.log", "Log", 0, 0, 0, 0, 0, 0, 0, 0, 0, 8469, 0, 1293, 9762
+"Total", "-", 4858, 24446, 6184, 340, 20, 3, 55, 2, 3, 8469, 2971, 8813, 56164

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
.VSCodeCounter/2024-11-05_10-42-46/results.json


+ 128 - 0
.VSCodeCounter/2024-11-05_10-42-46/results.md

@@ -0,0 +1,128 @@
+# Summary
+
+Date : 2024-11-05 10:42:46
+
+Directory /Users/dema/work/CostAccountingSys
+
+Total : 250 files,  44380 codes, 2971 comments, 8813 blanks, all 56164 lines
+
+Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
+
+## Languages
+| language | files | code | comment | blank | total |
+| :--- | ---: | ---: | ---: | ---: | ---: |
+| TypeScript JSX | 94 | 24,446 | 1,785 | 4,368 | 30,599 |
+| Log | 1 | 8,469 | 0 | 1,293 | 9,762 |
+| Less | 65 | 6,184 | 104 | 1,062 | 7,350 |
+| TypeScript | 71 | 4,858 | 924 | 1,907 | 7,689 |
+| JavaScript | 13 | 340 | 158 | 176 | 674 |
+| JSON | 2 | 55 | 0 | 2 | 57 |
+| HTML | 1 | 20 | 0 | 1 | 21 |
+| JSON with Comments | 1 | 3 | 0 | 1 | 4 |
+| Ignore | 1 | 3 | 0 | 1 | 4 |
+| Markdown | 1 | 2 | 0 | 2 | 4 |
+
+## Directories
+| path | files | code | comment | blank | total |
+| :--- | ---: | ---: | ---: | ---: | ---: |
+| . | 250 | 44,380 | 2,971 | 8,813 | 56,164 |
+| . (Files) | 10 | 8,935 | 22 | 1,318 | 10,275 |
+| config | 1 | 0 | 8 | 4 | 12 |
+| mock | 5 | 412 | 32 | 138 | 582 |
+| src | 234 | 35,033 | 2,909 | 7,353 | 45,295 |
+| src (Files) | 7 | 1,184 | 182 | 322 | 1,688 |
+| src/components | 22 | 1,333 | 175 | 318 | 1,826 |
+| src/components/Guide | 3 | 25 | 1 | 6 | 32 |
+| src/components/KCIMDrawerForm | 2 | 23 | 9 | 11 | 43 |
+| src/components/KCIMLeftList | 2 | 278 | 69 | 71 | 418 |
+| src/components/KCIMModalForm | 1 | 23 | 8 | 11 | 42 |
+| src/components/KCIMPageContainer | 2 | 194 | 8 | 37 | 239 |
+| src/components/KCIMTable | 2 | 219 | 19 | 65 | 303 |
+| src/components/KCIMTableSelector | 2 | 173 | 10 | 44 | 227 |
+| src/components/KCIMUpload | 2 | 82 | 9 | 19 | 110 |
+| src/components/ProgressModal | 2 | 91 | 16 | 20 | 127 |
+| src/components/ResizableContainer | 2 | 72 | 8 | 17 | 97 |
+| src/components/SQLEditor | 2 | 153 | 18 | 17 | 188 |
+| src/constants | 1 | 1 | 0 | 1 | 2 |
+| src/models | 1 | 10 | 1 | 3 | 14 |
+| src/pages | 190 | 31,750 | 2,365 | 6,472 | 40,587 |
+| src/pages (Files) | 1 | 15 | 8 | 3 | 26 |
+| src/pages/Home | 3 | 122 | 28 | 38 | 188 |
+| src/pages/baseInfoMana | 13 | 1,536 | 116 | 375 | 2,027 |
+| src/pages/baseInfoMana/checkGroupMana | 4 | 389 | 32 | 102 | 523 |
+| src/pages/baseInfoMana/empMana | 5 | 692 | 53 | 148 | 893 |
+| src/pages/baseInfoMana/unitMana | 4 | 455 | 31 | 125 | 611 |
+| src/pages/baseSetting | 62 | 9,293 | 705 | 2,057 | 12,055 |
+| src/pages/baseSetting/accountingAccountSet | 13 | 1,888 | 115 | 435 | 2,438 |
+| src/pages/baseSetting/accountingAccountSet/accountingSubMana | 3 | 485 | 28 | 95 | 608 |
+| src/pages/baseSetting/accountingAccountSet/accountingSubMap | 3 | 306 | 27 | 76 | 409 |
+| src/pages/baseSetting/accountingAccountSet/chargeItemMap | 4 | 774 | 35 | 181 | 990 |
+| src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana | 3 | 323 | 25 | 83 | 431 |
+| src/pages/baseSetting/costAllocationSet | 22 | 3,105 | 249 | 701 | 4,055 |
+| src/pages/baseSetting/costAllocationSet/allocationLevelSet | 3 | 327 | 23 | 80 | 430 |
+| src/pages/baseSetting/costAllocationSet/allocationParamsMap | 5 | 802 | 62 | 196 | 1,060 |
+| src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal | 3 | 483 | 24 | 93 | 600 |
+| src/pages/baseSetting/costAllocationSet/costAllocationParamsSet | 4 | 581 | 32 | 131 | 744 |
+| src/pages/baseSetting/costAllocationSet/idleCostSetting | 3 | 391 | 81 | 93 | 565 |
+| src/pages/baseSetting/costAllocationSet/revenueImputationSet | 4 | 521 | 27 | 108 | 656 |
+| src/pages/baseSetting/otherItemSet | 20 | 3,343 | 284 | 736 | 4,363 |
+| src/pages/baseSetting/otherItemSet/departmentCostCalc | 4 | 1,086 | 91 | 245 | 1,422 |
+| src/pages/baseSetting/otherItemSet/diySqlMana | 3 | 462 | 61 | 114 | 637 |
+| src/pages/baseSetting/otherItemSet/reportItemSet | 4 | 865 | 63 | 157 | 1,085 |
+| src/pages/baseSetting/otherItemSet/reportProjectSetting | 3 | 384 | 23 | 73 | 480 |
+| src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting | 3 | 317 | 25 | 80 | 422 |
+| src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet | 3 | 229 | 21 | 67 | 317 |
+| src/pages/baseSetting/responsibilityCenterSet | 7 | 957 | 57 | 185 | 1,199 |
+| src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter | 3 | 581 | 35 | 106 | 722 |
+| src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect | 4 | 376 | 22 | 79 | 477 |
+| src/pages/costAccounting | 5 | 2,549 | 126 | 241 | 2,916 |
+| src/pages/costAccounting/calcPageTemplate | 5 | 2,549 | 126 | 241 | 2,916 |
+| src/pages/costLibraryManagement | 57 | 11,062 | 633 | 2,191 | 13,886 |
+| src/pages/costLibraryManagement/basicCostManagement | 16 | 2,630 | 175 | 547 | 3,352 |
+| src/pages/costLibraryManagement/basicCostManagement/drugCostManagement | 3 | 419 | 31 | 87 | 537 |
+| src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement | 3 | 411 | 30 | 85 | 526 |
+| src/pages/costLibraryManagement/basicCostManagement/materialCostManagement | 3 | 442 | 34 | 87 | 563 |
+| src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana | 4 | 923 | 50 | 204 | 1,177 |
+| src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement | 3 | 435 | 30 | 84 | 549 |
+| src/pages/costLibraryManagement/diseaseCostManagement | 6 | 722 | 52 | 168 | 942 |
+| src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison | 3 | 392 | 23 | 85 | 500 |
+| src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana | 3 | 330 | 29 | 83 | 442 |
+| src/pages/costLibraryManagement/medicalOrderProject | 4 | 939 | 37 | 194 | 1,170 |
+| src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana | 4 | 939 | 37 | 194 | 1,170 |
+| src/pages/costLibraryManagement/projectCostManagement | 19 | 4,648 | 230 | 819 | 5,697 |
+| src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana | 7 | 2,427 | 112 | 371 | 2,910 |
+| src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana (Files) | 3 | 843 | 69 | 149 | 1,061 |
+| src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components | 4 | 1,584 | 43 | 222 | 1,849 |
+| src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet | 5 | 791 | 43 | 191 | 1,025 |
+| src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet | 3 | 350 | 25 | 85 | 460 |
+| src/pages/costLibraryManagement/projectCostManagement/standardProjectMana | 4 | 1,080 | 50 | 172 | 1,302 |
+| src/pages/costLibraryManagement/reportMana | 12 | 2,123 | 139 | 463 | 2,725 |
+| src/pages/costLibraryManagement/reportMana/reportColumnMana | 5 | 830 | 45 | 164 | 1,039 |
+| src/pages/costLibraryManagement/reportMana/reportListMana | 4 | 901 | 70 | 211 | 1,182 |
+| src/pages/costLibraryManagement/reportMana/reportNavSet | 3 | 392 | 24 | 88 | 504 |
+| src/pages/departmentCostCheck | 3 | 892 | 92 | 202 | 1,186 |
+| src/pages/departmentMenzhuCostCalc | 3 | 844 | 250 | 220 | 1,314 |
+| src/pages/incomeCollectionAction | 3 | 506 | 13 | 80 | 599 |
+| src/pages/monthlyInfoCollection | 6 | 944 | 48 | 182 | 1,174 |
+| src/pages/monthlyInfoCollection (Files) | 4 | 445 | 34 | 97 | 576 |
+| src/pages/monthlyInfoCollection/components | 2 | 499 | 14 | 85 | 598 |
+| src/pages/monthlyInfoSearch | 16 | 2,198 | 174 | 420 | 2,792 |
+| src/pages/monthlyInfoSearch/empCostDataImport | 3 | 327 | 28 | 70 | 425 |
+| src/pages/monthlyInfoSearch/incomeCostDataImport | 4 | 547 | 51 | 102 | 700 |
+| src/pages/monthlyInfoSearch/patientChargeItemsImport | 3 | 424 | 31 | 76 | 531 |
+| src/pages/monthlyInfoSearch/patientInfoImport | 3 | 435 | 23 | 75 | 533 |
+| src/pages/monthlyInfoSearch/wholeHospIncomeAndCost | 3 | 465 | 41 | 97 | 603 |
+| src/pages/noAccess | 2 | 63 | 9 | 8 | 80 |
+| src/pages/reportExport | 4 | 480 | 68 | 161 | 709 |
+| src/pages/reportExport/report | 4 | 480 | 68 | 161 | 709 |
+| src/pages/setting | 6 | 773 | 48 | 154 | 975 |
+| src/pages/setting/fenyeTemplate | 3 | 388 | 25 | 77 | 490 |
+| src/pages/setting/qualitativeOptionsMana | 3 | 385 | 23 | 77 | 485 |
+| src/pages/specialDataImport | 3 | 288 | 21 | 70 | 379 |
+| src/pages/static | 3 | 185 | 26 | 70 | 281 |
+| src/services | 5 | 195 | 54 | 57 | 306 |
+| src/services (Files) | 2 | 69 | 25 | 38 | 132 |
+| src/services/demo | 3 | 126 | 29 | 19 | 174 |
+| src/utils | 8 | 560 | 132 | 180 | 872 |
+
+Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)

+ 381 - 0
.VSCodeCounter/2024-11-05_10-42-46/results.txt

@@ -0,0 +1,381 @@
+Date : 2024-11-05 10:42:46
+Directory : /Users/dema/work/CostAccountingSys
+Total : 250 files,  44380 codes, 2971 comments, 8813 blanks, all 56164 lines
+
+Languages
++--------------------+------------+------------+------------+------------+------------+
+| language           | files      | code       | comment    | blank      | total      |
++--------------------+------------+------------+------------+------------+------------+
+| TypeScript JSX     |         94 |     24,446 |      1,785 |      4,368 |     30,599 |
+| Log                |          1 |      8,469 |          0 |      1,293 |      9,762 |
+| Less               |         65 |      6,184 |        104 |      1,062 |      7,350 |
+| TypeScript         |         71 |      4,858 |        924 |      1,907 |      7,689 |
+| JavaScript         |         13 |        340 |        158 |        176 |        674 |
+| JSON               |          2 |         55 |          0 |          2 |         57 |
+| HTML               |          1 |         20 |          0 |          1 |         21 |
+| JSON with Comments |          1 |          3 |          0 |          1 |          4 |
+| Ignore             |          1 |          3 |          0 |          1 |          4 |
+| Markdown           |          1 |          2 |          0 |          2 |          4 |
++--------------------+------------+------------+------------+------------+------------+
+
+Directories
++---------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
+| path                                                                                                                                  | files      | code       | comment    | blank      | total      |
++---------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
+| .                                                                                                                                     |        250 |     44,380 |      2,971 |      8,813 |     56,164 |
+| . (Files)                                                                                                                             |         10 |      8,935 |         22 |      1,318 |     10,275 |
+| config                                                                                                                                |          1 |          0 |          8 |          4 |         12 |
+| mock                                                                                                                                  |          5 |        412 |         32 |        138 |        582 |
+| src                                                                                                                                   |        234 |     35,033 |      2,909 |      7,353 |     45,295 |
+| src (Files)                                                                                                                           |          7 |      1,184 |        182 |        322 |      1,688 |
+| src/components                                                                                                                        |         22 |      1,333 |        175 |        318 |      1,826 |
+| src/components/Guide                                                                                                                  |          3 |         25 |          1 |          6 |         32 |
+| src/components/KCIMDrawerForm                                                                                                         |          2 |         23 |          9 |         11 |         43 |
+| src/components/KCIMLeftList                                                                                                           |          2 |        278 |         69 |         71 |        418 |
+| src/components/KCIMModalForm                                                                                                          |          1 |         23 |          8 |         11 |         42 |
+| src/components/KCIMPageContainer                                                                                                      |          2 |        194 |          8 |         37 |        239 |
+| src/components/KCIMTable                                                                                                              |          2 |        219 |         19 |         65 |        303 |
+| src/components/KCIMTableSelector                                                                                                      |          2 |        173 |         10 |         44 |        227 |
+| src/components/KCIMUpload                                                                                                             |          2 |         82 |          9 |         19 |        110 |
+| src/components/ProgressModal                                                                                                          |          2 |         91 |         16 |         20 |        127 |
+| src/components/ResizableContainer                                                                                                     |          2 |         72 |          8 |         17 |         97 |
+| src/components/SQLEditor                                                                                                              |          2 |        153 |         18 |         17 |        188 |
+| src/constants                                                                                                                         |          1 |          1 |          0 |          1 |          2 |
+| src/models                                                                                                                            |          1 |         10 |          1 |          3 |         14 |
+| src/pages                                                                                                                             |        190 |     31,750 |      2,365 |      6,472 |     40,587 |
+| src/pages (Files)                                                                                                                     |          1 |         15 |          8 |          3 |         26 |
+| src/pages/Home                                                                                                                        |          3 |        122 |         28 |         38 |        188 |
+| src/pages/baseInfoMana                                                                                                                |         13 |      1,536 |        116 |        375 |      2,027 |
+| src/pages/baseInfoMana/checkGroupMana                                                                                                 |          4 |        389 |         32 |        102 |        523 |
+| src/pages/baseInfoMana/empMana                                                                                                        |          5 |        692 |         53 |        148 |        893 |
+| src/pages/baseInfoMana/unitMana                                                                                                       |          4 |        455 |         31 |        125 |        611 |
+| src/pages/baseSetting                                                                                                                 |         62 |      9,293 |        705 |      2,057 |     12,055 |
+| src/pages/baseSetting/accountingAccountSet                                                                                            |         13 |      1,888 |        115 |        435 |      2,438 |
+| src/pages/baseSetting/accountingAccountSet/accountingSubMana                                                                          |          3 |        485 |         28 |         95 |        608 |
+| src/pages/baseSetting/accountingAccountSet/accountingSubMap                                                                           |          3 |        306 |         27 |         76 |        409 |
+| src/pages/baseSetting/accountingAccountSet/chargeItemMap                                                                              |          4 |        774 |         35 |        181 |        990 |
+| src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana                                                                      |          3 |        323 |         25 |         83 |        431 |
+| src/pages/baseSetting/costAllocationSet                                                                                               |         22 |      3,105 |        249 |        701 |      4,055 |
+| src/pages/baseSetting/costAllocationSet/allocationLevelSet                                                                            |          3 |        327 |         23 |         80 |        430 |
+| src/pages/baseSetting/costAllocationSet/allocationParamsMap                                                                           |          5 |        802 |         62 |        196 |      1,060 |
+| src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal                                                                      |          3 |        483 |         24 |         93 |        600 |
+| src/pages/baseSetting/costAllocationSet/costAllocationParamsSet                                                                       |          4 |        581 |         32 |        131 |        744 |
+| src/pages/baseSetting/costAllocationSet/idleCostSetting                                                                               |          3 |        391 |         81 |         93 |        565 |
+| src/pages/baseSetting/costAllocationSet/revenueImputationSet                                                                          |          4 |        521 |         27 |        108 |        656 |
+| src/pages/baseSetting/otherItemSet                                                                                                    |         20 |      3,343 |        284 |        736 |      4,363 |
+| src/pages/baseSetting/otherItemSet/departmentCostCalc                                                                                 |          4 |      1,086 |         91 |        245 |      1,422 |
+| src/pages/baseSetting/otherItemSet/diySqlMana                                                                                         |          3 |        462 |         61 |        114 |        637 |
+| src/pages/baseSetting/otherItemSet/reportItemSet                                                                                      |          4 |        865 |         63 |        157 |      1,085 |
+| src/pages/baseSetting/otherItemSet/reportProjectSetting                                                                               |          3 |        384 |         23 |         73 |        480 |
+| src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting                                                                         |          3 |        317 |         25 |         80 |        422 |
+| src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet                                                                          |          3 |        229 |         21 |         67 |        317 |
+| src/pages/baseSetting/responsibilityCenterSet                                                                                         |          7 |        957 |         57 |        185 |      1,199 |
+| src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter                                                                    |          3 |        581 |         35 |        106 |        722 |
+| src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect                                                             |          4 |        376 |         22 |         79 |        477 |
+| src/pages/costAccounting                                                                                                              |          5 |      2,549 |        126 |        241 |      2,916 |
+| src/pages/costAccounting/calcPageTemplate                                                                                             |          5 |      2,549 |        126 |        241 |      2,916 |
+| src/pages/costLibraryManagement                                                                                                       |         57 |     11,062 |        633 |      2,191 |     13,886 |
+| src/pages/costLibraryManagement/basicCostManagement                                                                                   |         16 |      2,630 |        175 |        547 |      3,352 |
+| src/pages/costLibraryManagement/basicCostManagement/drugCostManagement                                                                |          3 |        419 |         31 |         87 |        537 |
+| src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement                                                           |          3 |        411 |         30 |         85 |        526 |
+| src/pages/costLibraryManagement/basicCostManagement/materialCostManagement                                                            |          3 |        442 |         34 |         87 |        563 |
+| src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana                                                       |          4 |        923 |         50 |        204 |      1,177 |
+| src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement                                                               |          3 |        435 |         30 |         84 |        549 |
+| src/pages/costLibraryManagement/diseaseCostManagement                                                                                 |          6 |        722 |         52 |        168 |        942 |
+| src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison                                                      |          3 |        392 |         23 |         85 |        500 |
+| src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana                                                                     |          3 |        330 |         29 |         83 |        442 |
+| src/pages/costLibraryManagement/medicalOrderProject                                                                                   |          4 |        939 |         37 |        194 |      1,170 |
+| src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana                                                           |          4 |        939 |         37 |        194 |      1,170 |
+| src/pages/costLibraryManagement/projectCostManagement                                                                                 |         19 |      4,648 |        230 |        819 |      5,697 |
+| src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana                                                                 |          7 |      2,427 |        112 |        371 |      2,910 |
+| src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana (Files)                                                         |          3 |        843 |         69 |        149 |      1,061 |
+| src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components                                                      |          4 |      1,584 |         43 |        222 |      1,849 |
+| src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet                                                             |          5 |        791 |         43 |        191 |      1,025 |
+| src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet                                                           |          3 |        350 |         25 |         85 |        460 |
+| src/pages/costLibraryManagement/projectCostManagement/standardProjectMana                                                             |          4 |      1,080 |         50 |        172 |      1,302 |
+| src/pages/costLibraryManagement/reportMana                                                                                            |         12 |      2,123 |        139 |        463 |      2,725 |
+| src/pages/costLibraryManagement/reportMana/reportColumnMana                                                                           |          5 |        830 |         45 |        164 |      1,039 |
+| src/pages/costLibraryManagement/reportMana/reportListMana                                                                             |          4 |        901 |         70 |        211 |      1,182 |
+| src/pages/costLibraryManagement/reportMana/reportNavSet                                                                               |          3 |        392 |         24 |         88 |        504 |
+| src/pages/departmentCostCheck                                                                                                         |          3 |        892 |         92 |        202 |      1,186 |
+| src/pages/departmentMenzhuCostCalc                                                                                                    |          3 |        844 |        250 |        220 |      1,314 |
+| src/pages/incomeCollectionAction                                                                                                      |          3 |        506 |         13 |         80 |        599 |
+| src/pages/monthlyInfoCollection                                                                                                       |          6 |        944 |         48 |        182 |      1,174 |
+| src/pages/monthlyInfoCollection (Files)                                                                                               |          4 |        445 |         34 |         97 |        576 |
+| src/pages/monthlyInfoCollection/components                                                                                            |          2 |        499 |         14 |         85 |        598 |
+| src/pages/monthlyInfoSearch                                                                                                           |         16 |      2,198 |        174 |        420 |      2,792 |
+| src/pages/monthlyInfoSearch/empCostDataImport                                                                                         |          3 |        327 |         28 |         70 |        425 |
+| src/pages/monthlyInfoSearch/incomeCostDataImport                                                                                      |          4 |        547 |         51 |        102 |        700 |
+| src/pages/monthlyInfoSearch/patientChargeItemsImport                                                                                  |          3 |        424 |         31 |         76 |        531 |
+| src/pages/monthlyInfoSearch/patientInfoImport                                                                                         |          3 |        435 |         23 |         75 |        533 |
+| src/pages/monthlyInfoSearch/wholeHospIncomeAndCost                                                                                    |          3 |        465 |         41 |         97 |        603 |
+| src/pages/noAccess                                                                                                                    |          2 |         63 |          9 |          8 |         80 |
+| src/pages/reportExport                                                                                                                |          4 |        480 |         68 |        161 |        709 |
+| src/pages/reportExport/report                                                                                                         |          4 |        480 |         68 |        161 |        709 |
+| src/pages/setting                                                                                                                     |          6 |        773 |         48 |        154 |        975 |
+| src/pages/setting/fenyeTemplate                                                                                                       |          3 |        388 |         25 |         77 |        490 |
+| src/pages/setting/qualitativeOptionsMana                                                                                              |          3 |        385 |         23 |         77 |        485 |
+| src/pages/specialDataImport                                                                                                           |          3 |        288 |         21 |         70 |        379 |
+| src/pages/static                                                                                                                      |          3 |        185 |         26 |         70 |        281 |
+| src/services                                                                                                                          |          5 |        195 |         54 |         57 |        306 |
+| src/services (Files)                                                                                                                  |          2 |         69 |         25 |         38 |        132 |
+| src/services/demo                                                                                                                     |          3 |        126 |         29 |         19 |        174 |
+| src/utils                                                                                                                             |          8 |        560 |        132 |        180 |        872 |
++---------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
+
+Files
++---------------------------------------------------------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
+| filename                                                                                                                              | language           | code       | comment    | blank      | total      |
++---------------------------------------------------------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
+| /Users/dema/work/CostAccountingSys/.eslintrc.js                                                                                       | JavaScript         |          3 |          0 |          1 |          4 |
+| /Users/dema/work/CostAccountingSys/.prettierignore                                                                                    | Ignore             |          3 |          0 |          1 |          4 |
+| /Users/dema/work/CostAccountingSys/.prettierrc                                                                                        | JSON               |          8 |          0 |          1 |          9 |
+| /Users/dema/work/CostAccountingSys/.stylelintrc.js                                                                                    | JavaScript         |          3 |          0 |          1 |          4 |
+| /Users/dema/work/CostAccountingSys/.umirc.ts                                                                                          | TypeScript         |        389 |         14 |         15 |        418 |
+| /Users/dema/work/CostAccountingSys/README.md                                                                                          | Markdown           |          2 |          0 |          2 |          4 |
+| /Users/dema/work/CostAccountingSys/config/proxy.ts                                                                                    | TypeScript         |          0 |          8 |          4 |         12 |
+| /Users/dema/work/CostAccountingSys/mock/home.ts                                                                                       | TypeScript         |         47 |          8 |          5 |         60 |
+| /Users/dema/work/CostAccountingSys/mock/monthlyData.ts                                                                                | TypeScript         |        156 |          8 |         78 |        242 |
+| /Users/dema/work/CostAccountingSys/mock/monthlyInfo.ts                                                                                | TypeScript         |        147 |          8 |         50 |        205 |
+| /Users/dema/work/CostAccountingSys/mock/monthlySet.ts                                                                                 | TypeScript         |         43 |          8 |          3 |         54 |
+| /Users/dema/work/CostAccountingSys/mock/userAPI.ts                                                                                    | TypeScript         |         19 |          0 |          2 |         21 |
+| /Users/dema/work/CostAccountingSys/package.json                                                                                       | JSON               |         47 |          0 |          1 |         48 |
+| /Users/dema/work/CostAccountingSys/src/access.ts                                                                                      | TypeScript         |         45 |         12 |         22 |         79 |
+| /Users/dema/work/CostAccountingSys/src/app.tsx                                                                                        | TypeScript JSX     |        419 |         64 |        119 |        602 |
+| /Users/dema/work/CostAccountingSys/src/authWrapper.tsx                                                                                | TypeScript JSX     |         46 |         12 |          7 |         65 |
+| /Users/dema/work/CostAccountingSys/src/components/Guide/Guide.less                                                                    | Less               |          4 |          0 |          1 |          5 |
+| /Users/dema/work/CostAccountingSys/src/components/Guide/Guide.tsx                                                                     | TypeScript JSX     |         19 |          1 |          4 |         24 |
+| /Users/dema/work/CostAccountingSys/src/components/Guide/index.ts                                                                      | TypeScript         |          2 |          0 |          1 |          3 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMDrawerForm/index.tsx                                                            | TypeScript JSX     |          6 |          9 |          8 |         23 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMDrawerForm/style.less                                                           | Less               |         17 |          0 |          3 |         20 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMLeftList/index.tsx                                                              | TypeScript JSX     |        168 |         61 |         51 |        280 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMLeftList/style.less                                                             | Less               |        110 |          8 |         20 |        138 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMModalForm/index.tsx                                                             | TypeScript JSX     |         23 |          8 |         11 |         42 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMPageContainer/index.tsx                                                         | TypeScript JSX     |         75 |          8 |         18 |        101 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMPageContainer/style.less                                                        | Less               |        119 |          0 |         19 |        138 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMTable/index.tsx                                                                 | TypeScript JSX     |         40 |         11 |         15 |         66 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMTable/style.less                                                                | Less               |        179 |          8 |         50 |        237 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMTableSelector/index.tsx                                                         | TypeScript JSX     |        144 |         10 |         40 |        194 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMTableSelector/style.less                                                        | Less               |         29 |          0 |          4 |         33 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMUpload/index.tsx                                                                | TypeScript JSX     |         56 |          9 |         14 |         79 |
+| /Users/dema/work/CostAccountingSys/src/components/KCIMUpload/style.less                                                               | Less               |         26 |          0 |          5 |         31 |
+| /Users/dema/work/CostAccountingSys/src/components/ProgressModal/index.tsx                                                             | TypeScript JSX     |         74 |          8 |         11 |         93 |
+| /Users/dema/work/CostAccountingSys/src/components/ProgressModal/service.ts                                                            | TypeScript         |         17 |          8 |          9 |         34 |
+| /Users/dema/work/CostAccountingSys/src/components/ResizableContainer/index.tsx                                                        | TypeScript JSX     |         54 |          8 |         10 |         72 |
+| /Users/dema/work/CostAccountingSys/src/components/ResizableContainer/style.less                                                       | Less               |         18 |          0 |          7 |         25 |
+| /Users/dema/work/CostAccountingSys/src/components/SQLEditor/index.tsx                                                                 | TypeScript JSX     |        108 |         10 |         15 |        133 |
+| /Users/dema/work/CostAccountingSys/src/components/SQLEditor/style.less                                                                | Less               |         45 |          8 |          2 |         55 |
+| /Users/dema/work/CostAccountingSys/src/constant.ts                                                                                    | TypeScript         |         10 |          8 |          2 |         20 |
+| /Users/dema/work/CostAccountingSys/src/constants/index.ts                                                                             | TypeScript         |          1 |          0 |          1 |          2 |
+| /Users/dema/work/CostAccountingSys/src/global.less                                                                                    | Less               |        610 |         52 |        163 |        825 |
+| /Users/dema/work/CostAccountingSys/src/menuIcons.js                                                                                   | JavaScript         |         33 |         24 |          6 |         63 |
+| /Users/dema/work/CostAccountingSys/src/models/global.ts                                                                               | TypeScript         |         10 |          1 |          3 |         14 |
+| /Users/dema/work/CostAccountingSys/src/pages/404.tsx                                                                                  | TypeScript JSX     |         15 |          8 |          3 |         26 |
+| /Users/dema/work/CostAccountingSys/src/pages/Home/index.tsx                                                                           | TypeScript JSX     |         17 |          9 |          7 |         33 |
+| /Users/dema/work/CostAccountingSys/src/pages/Home/service.ts                                                                          | TypeScript         |         28 |         11 |         22 |         61 |
+| /Users/dema/work/CostAccountingSys/src/pages/Home/style.less                                                                          | Less               |         77 |          8 |          9 |         94 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/checkGroupMana/index.tsx                                                    | TypeScript JSX     |        207 |         13 |         42 |        262 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/checkGroupMana/service.ts                                                   | TypeScript         |         60 |         13 |         24 |         97 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/checkGroupMana/style.less                                                   | Less               |         37 |          0 |          7 |         44 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/checkGroupMana/tableSelector.tsx                                            | TypeScript JSX     |         85 |          6 |         29 |        120 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/empMana/index.tsx                                                           | TypeScript JSX     |        257 |         15 |         48 |        320 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/empMana/service.ts                                                          | TypeScript         |         69 |         14 |         24 |        107 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/empMana/style.less                                                          | Less               |         66 |          0 |         15 |         81 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/empMana/tableSelector.tsx                                                   | TypeScript JSX     |        203 |          5 |         42 |        250 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/empMana/transform.tsx                                                       | TypeScript JSX     |         97 |         19 |         19 |        135 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/unitMana/index.tsx                                                          | TypeScript JSX     |        207 |         13 |         51 |        271 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/unitMana/service.ts                                                         | TypeScript         |         30 |         12 |         21 |         63 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/unitMana/style.less                                                         | Less               |         66 |          0 |         13 |         79 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseInfoMana/unitMana/tableSelector.tsx                                                  | TypeScript JSX     |        152 |          6 |         40 |        198 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMana/index.tsx                             | TypeScript JSX     |        413 |         11 |         58 |        482 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMana/service.ts                            | TypeScript         |         39 |         13 |         31 |         83 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMana/style.less                            | Less               |         33 |          4 |          6 |         43 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMap/index.tsx                              | TypeScript JSX     |        250 |         16 |         45 |        311 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMap/service.ts                             | TypeScript         |         19 |         11 |         25 |         55 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/accountingSubMap/style.less                             | Less               |         37 |          0 |          6 |         43 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/chargeItemMap/index.tsx                                 | TypeScript JSX     |        359 |         14 |         79 |        452 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/chargeItemMap/service.ts                                | TypeScript         |         39 |         14 |         24 |         77 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/chargeItemMap/style.less                                | Less               |        224 |          1 |         35 |        260 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/chargeItemMap/tableSelector.tsx                         | TypeScript JSX     |        152 |          6 |         43 |        201 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/index.tsx                         | TypeScript JSX     |        236 |         12 |         45 |        293 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/service.ts                        | TypeScript         |         38 |         13 |         30 |         81 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/style.less                        | Less               |         49 |          0 |          8 |         57 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationLevelSet/index.tsx                               | TypeScript JSX     |        255 |         11 |         45 |        311 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationLevelSet/service.ts                              | TypeScript         |         35 |         12 |         29 |         76 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationLevelSet/style.less                              | Less               |         37 |          0 |          6 |         43 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationParamsMap/editTableModal.tsx                     | TypeScript JSX     |        161 |          5 |         34 |        200 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationParamsMap/index.tsx                              | TypeScript JSX     |        359 |         31 |         57 |        447 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationParamsMap/service.ts                             | TypeScript         |         70 |         19 |         47 |        136 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationParamsMap/style.less                             | Less               |         78 |          0 |         13 |         91 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/allocationParamsMap/tableSelector.tsx                      | TypeScript JSX     |        134 |          7 |         45 |        186 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/index.tsx                         | TypeScript JSX     |        380 |          9 |         53 |        442 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/service.ts                        | TypeScript         |         47 |         14 |         32 |         93 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/style.less                        | Less               |         56 |          1 |          8 |         65 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/index.tsx                          | TypeScript JSX     |        273 |         10 |         48 |        331 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/service.ts                         | TypeScript         |         44 |         13 |         31 |         88 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/style.less                         | Less               |         37 |          0 |          6 |         43 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/transform.tsx                      | TypeScript JSX     |        227 |          9 |         46 |        282 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/idleCostSetting/index.tsx                                  | TypeScript JSX     |        297 |         66 |         54 |        417 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/idleCostSetting/service.ts                                 | TypeScript         |         57 |         15 |         33 |        105 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/idleCostSetting/style.less                                 | Less               |         37 |          0 |          6 |         43 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/revenueImputationSet/index.tsx                             | TypeScript JSX     |        318 |          9 |         45 |        372 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/revenueImputationSet/service.ts                            | TypeScript         |         47 |         14 |         32 |         93 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/revenueImputationSet/style.less                            | Less               |         31 |          0 |          4 |         35 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/costAllocationSet/revenueImputationSet/transform.tsx                         | TypeScript JSX     |        125 |          4 |         27 |        156 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/index.tsx                                    | TypeScript JSX     |        627 |         58 |        136 |        821 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/service.ts                                   | TypeScript         |         74 |         18 |         39 |        131 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/style.less                                   | Less               |        151 |          0 |         17 |        168 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/departmentCostCalc/transform.tsx                                | TypeScript JSX     |        234 |         15 |         53 |        302 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/diySqlMana/index.tsx                                            | TypeScript JSX     |        317 |         47 |         67 |        431 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/diySqlMana/service.ts                                           | TypeScript         |         64 |         13 |         33 |        110 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/diySqlMana/style.less                                           | Less               |         81 |          1 |         14 |         96 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/index.tsx                                         | TypeScript JSX     |        517 |         31 |         62 |        610 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/service.ts                                        | TypeScript         |         56 |         15 |         33 |        104 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/style.less                                        | Less               |         58 |          0 |         10 |         68 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportItemSet/transform.tsx                                     | TypeScript JSX     |        234 |         17 |         52 |        303 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportProjectSetting/index.tsx                                  | TypeScript JSX     |        277 |         10 |         30 |        317 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportProjectSetting/service.js                                 | JavaScript         |         30 |         13 |         27 |         70 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/reportProjectSetting/style.less                                 | Less               |         77 |          0 |         16 |         93 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/index.tsx                            | TypeScript JSX     |        244 |         13 |         45 |        302 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/service.ts                           | TypeScript         |         36 |         12 |         29 |         77 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/style.less                           | Less               |         37 |          0 |          6 |         43 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/index.tsx                             | TypeScript JSX     |        166 |          9 |         34 |        209 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/service.ts                            | TypeScript         |         33 |         12 |         29 |         74 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/style.less                            | Less               |         30 |          0 |          4 |         34 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/index.tsx                       | TypeScript JSX     |        484 |         20 |         63 |        567 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/service.ts                      | TypeScript         |         48 |         15 |         35 |         98 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/style.less                      | Less               |         49 |          0 |          8 |         57 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/index.tsx                | TypeScript JSX     |        187 |          8 |         41 |        236 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/service.ts               | TypeScript         |         19 |         11 |          9 |         39 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/style.less               | Less               |         49 |          0 |          8 |         57 |
+| /Users/dema/work/CostAccountingSys/src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/transform.tsx            | TypeScript JSX     |        121 |          3 |         21 |        145 |
+| /Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/columns.tsx                                              | TypeScript JSX     |        963 |         68 |         38 |      1,069 |
+| /Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/config.ts                                                | TypeScript         |        375 |          8 |         26 |        409 |
+| /Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/index.tsx                                                | TypeScript JSX     |        790 |         28 |        125 |        943 |
+| /Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/service.ts                                               | TypeScript         |        340 |         22 |         40 |        402 |
+| /Users/dema/work/CostAccountingSys/src/pages/costAccounting/calcPageTemplate/style.less                                               | Less               |         81 |          0 |         12 |         93 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/index.tsx                   | TypeScript JSX     |        305 |         17 |         48 |        370 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/service.ts                  | TypeScript         |         65 |         14 |         32 |        111 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/style.less                  | Less               |         49 |          0 |          7 |         56 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/index.tsx              | TypeScript JSX     |        302 |         17 |         48 |        367 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/service.ts             | TypeScript         |         60 |         13 |         30 |        103 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/style.less             | Less               |         49 |          0 |          7 |         56 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/index.tsx               | TypeScript JSX     |        333 |         21 |         50 |        404 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/service.ts              | TypeScript         |         60 |         13 |         30 |        103 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/style.less              | Less               |         49 |          0 |          7 |         56 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/index.tsx          | TypeScript JSX     |        481 |         22 |         88 |        591 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/service.ts         | TypeScript         |         85 |         22 |         42 |        149 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/style.less         | Less               |        223 |          0 |         31 |        254 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/tableSelector.tsx  | TypeScript JSX     |        134 |          6 |         43 |        183 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/index.tsx                  | TypeScript JSX     |        332 |         17 |         47 |        396 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/service.ts                 | TypeScript         |         54 |         13 |         30 |         97 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/style.less                 | Less               |         49 |          0 |          7 |         56 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/index.tsx         | TypeScript JSX     |        287 |          9 |         46 |        342 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/service.ts        | TypeScript         |         56 |         14 |         31 |        101 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/style.less        | Less               |         49 |          0 |          8 |         57 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/index.tsx                        | TypeScript JSX     |        225 |         16 |         45 |        286 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/service.ts                       | TypeScript         |         56 |         13 |         30 |         99 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/style.less                       | Less               |         49 |          0 |          8 |         57 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/index.tsx              | TypeScript JSX     |        495 |         11 |         81 |        587 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/service.ts             | TypeScript         |         83 |         20 |         40 |        143 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/style.less             | Less               |        209 |          0 |         30 |        239 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/tableSelector.tsx      | TypeScript JSX     |        152 |          6 |         43 |        201 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/match.tsx         | TypeScript JSX     |        455 |         14 |         56 |        525 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/setting.tsx       | TypeScript JSX     |        535 |         15 |         56 |        606 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/style.less        | Less               |        449 |          7 |         66 |        522 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/components/tableSelector.tsx | TypeScript JSX     |        145 |          7 |         44 |        196 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/index.tsx                    | TypeScript JSX     |        492 |         28 |         62 |        582 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/service.ts                   | TypeScript         |        198 |         41 |         62 |        301 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/style.less                   | Less               |        153 |          0 |         25 |        178 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/editTableModal.tsx       | TypeScript JSX     |        138 |          5 |         32 |        175 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/index.tsx                | TypeScript JSX     |        367 |         11 |         50 |        428 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/service.ts               | TypeScript         |         75 |         20 |         51 |        146 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/style.less               | Less               |         78 |          0 |         13 |         91 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/tableSelector.tsx        | TypeScript JSX     |        133 |          7 |         45 |        185 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/index.tsx              | TypeScript JSX     |        250 |         11 |         47 |        308 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/service.ts             | TypeScript         |         51 |         14 |         31 |         96 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/style.less             | Less               |         49 |          0 |          7 |         56 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx               | TypeScript JSX     |        391 |         12 |         49 |        452 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/index.tsx                | TypeScript JSX     |        364 |         16 |         49 |        429 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/service.ts               | TypeScript         |        113 |         21 |         49 |        183 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/style.less               | Less               |        212 |          1 |         25 |        238 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportColumnMana/UpDateActBtn.tsx                       | TypeScript JSX     |        329 |          9 |         45 |        383 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportColumnMana/index.tsx                              | TypeScript JSX     |        227 |         13 |         49 |        289 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportColumnMana/service.ts                             | TypeScript         |        100 |         16 |         38 |        154 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportColumnMana/style.less                             | Less               |         64 |          3 |         13 |         80 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportColumnMana/transform.tsx                          | TypeScript JSX     |        110 |          4 |         19 |        133 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportListMana/index.tsx                                | TypeScript JSX     |        460 |         46 |         99 |        605 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportListMana/service.ts                               | TypeScript         |         64 |         18 |         36 |        118 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportListMana/style.less                               | Less               |        223 |          0 |         33 |        256 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportListMana/tableSelector.tsx                        | TypeScript JSX     |        154 |          6 |         43 |        203 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportNavSet/index.tsx                                  | TypeScript JSX     |        298 |         12 |         50 |        360 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportNavSet/service.ts                                 | TypeScript         |         57 |         12 |         31 |        100 |
+| /Users/dema/work/CostAccountingSys/src/pages/costLibraryManagement/reportMana/reportNavSet/style.less                                 | Less               |         37 |          0 |          7 |         44 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/index.tsx                                                            | TypeScript JSX     |        638 |         73 |        135 |        846 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/service.ts                                                           | TypeScript         |         80 |         19 |         41 |        140 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentCostCheck/style.less                                                           | Less               |        174 |          0 |         26 |        200 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/index.tsx                                                       | TypeScript JSX     |        650 |        239 |        167 |      1,056 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/service.ts                                                      | TypeScript         |         20 |         11 |         27 |         58 |
+| /Users/dema/work/CostAccountingSys/src/pages/departmentMenzhuCostCalc/style.less                                                      | Less               |        174 |          0 |         26 |        200 |
+| /Users/dema/work/CostAccountingSys/src/pages/incomeCollectionAction/index.tsx                                                         | TypeScript JSX     |        310 |         11 |         40 |        361 |
+| /Users/dema/work/CostAccountingSys/src/pages/incomeCollectionAction/service.ts                                                        | TypeScript         |         13 |          2 |          9 |         24 |
+| /Users/dema/work/CostAccountingSys/src/pages/incomeCollectionAction/style.less                                                        | Less               |        183 |          0 |         31 |        214 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/components/leftAndRighrStructure.tsx                               | TypeScript JSX     |        346 |         14 |         58 |        418 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/components/style.less                                              | Less               |        153 |          0 |         27 |        180 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/index.tsx                                                          | TypeScript JSX     |        177 |         13 |         22 |        212 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/service.ts                                                         | TypeScript         |         66 |         19 |         33 |        118 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/style.less                                                         | Less               |         49 |          0 |          4 |         53 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoCollection/tableSelector.tsx                                                  | TypeScript JSX     |        153 |          2 |         38 |        193 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/empCostDataImport/index.tsx                                            | TypeScript JSX     |        204 |         15 |         26 |        245 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/empCostDataImport/service.js                                           | JavaScript         |         39 |         13 |         27 |         79 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/empCostDataImport/style.less                                           | Less               |         84 |          0 |         17 |        101 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/incomeCostDataImport/index.tsx                                         | TypeScript JSX     |        391 |         35 |         56 |        482 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/incomeCostDataImport/service.js                                        | JavaScript         |         62 |         16 |         29 |        107 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/incomeCostDataImport/style.less                                        | Less               |         74 |          0 |         16 |         90 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/incomeCostDataImport/test.html                                         | HTML               |         20 |          0 |          1 |         21 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientChargeItemsImport/index.tsx                                     | TypeScript JSX     |        288 |         16 |         31 |        335 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientChargeItemsImport/service.js                                    | JavaScript         |         45 |         14 |         28 |         87 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientChargeItemsImport/style.less                                    | Less               |         91 |          1 |         17 |        109 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientInfoImport/index.tsx                                            | TypeScript JSX     |        312 |          9 |         32 |        353 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientInfoImport/service.js                                           | JavaScript         |         39 |         13 |         27 |         79 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/patientInfoImport/style.less                                           | Less               |         84 |          1 |         16 |        101 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/index.tsx                                       | TypeScript JSX     |        260 |         29 |         41 |        330 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/service.ts                                      | TypeScript         |         43 |         12 |         29 |         84 |
+| /Users/dema/work/CostAccountingSys/src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/style.less                                      | Less               |        162 |          0 |         27 |        189 |
+| /Users/dema/work/CostAccountingSys/src/pages/noAccess/index.tsx                                                                       | TypeScript JSX     |         18 |          9 |          4 |         31 |
+| /Users/dema/work/CostAccountingSys/src/pages/noAccess/style.less                                                                      | Less               |         45 |          0 |          4 |         49 |
+| /Users/dema/work/CostAccountingSys/src/pages/reportExport/report/ExportProgressModal.tsx                                              | TypeScript JSX     |         41 |          8 |         11 |         60 |
+| /Users/dema/work/CostAccountingSys/src/pages/reportExport/report/index.tsx                                                            | TypeScript JSX     |        338 |         51 |        122 |        511 |
+| /Users/dema/work/CostAccountingSys/src/pages/reportExport/report/service.ts                                                           | TypeScript         |         21 |          9 |         19 |         49 |
+| /Users/dema/work/CostAccountingSys/src/pages/reportExport/report/style.less                                                           | Less               |         80 |          0 |          9 |         89 |
+| /Users/dema/work/CostAccountingSys/src/pages/setting/fenyeTemplate/index.tsx                                                          | TypeScript JSX     |        304 |         13 |         47 |        364 |
+| /Users/dema/work/CostAccountingSys/src/pages/setting/fenyeTemplate/service.ts                                                         | TypeScript         |         47 |         12 |         23 |         82 |
+| /Users/dema/work/CostAccountingSys/src/pages/setting/fenyeTemplate/style.less                                                         | Less               |         37 |          0 |          7 |         44 |
+| /Users/dema/work/CostAccountingSys/src/pages/setting/qualitativeOptionsMana/index.tsx                                                 | TypeScript JSX     |        286 |          9 |         46 |        341 |
+| /Users/dema/work/CostAccountingSys/src/pages/setting/qualitativeOptionsMana/service.ts                                                | TypeScript         |         62 |         14 |         24 |        100 |
+| /Users/dema/work/CostAccountingSys/src/pages/setting/qualitativeOptionsMana/style.less                                                | Less               |         37 |          0 |          7 |         44 |
+| /Users/dema/work/CostAccountingSys/src/pages/specialDataImport/index.tsx                                                              | TypeScript JSX     |        205 |          9 |         37 |        251 |
+| /Users/dema/work/CostAccountingSys/src/pages/specialDataImport/service.ts                                                             | TypeScript         |         33 |         12 |         26 |         71 |
+| /Users/dema/work/CostAccountingSys/src/pages/specialDataImport/style.less                                                             | Less               |         50 |          0 |          7 |         57 |
+| /Users/dema/work/CostAccountingSys/src/pages/static/index.tsx                                                                         | TypeScript JSX     |         59 |         12 |         26 |         97 |
+| /Users/dema/work/CostAccountingSys/src/pages/static/service.js                                                                        | JavaScript         |         45 |         14 |         28 |         87 |
+| /Users/dema/work/CostAccountingSys/src/pages/static/style.less                                                                        | Less               |         81 |          0 |         16 |         97 |
+| /Users/dema/work/CostAccountingSys/src/services/auth.ts                                                                               | TypeScript         |         31 |         13 |         12 |         56 |
+| /Users/dema/work/CostAccountingSys/src/services/demo/UserController.ts                                                                | TypeScript         |         74 |         17 |          6 |         97 |
+| /Users/dema/work/CostAccountingSys/src/services/demo/index.ts                                                                         | TypeScript         |          4 |          2 |          2 |          8 |
+| /Users/dema/work/CostAccountingSys/src/services/demo/typings.d.ts                                                                     | TypeScript         |         48 |         10 |         11 |         69 |
+| /Users/dema/work/CostAccountingSys/src/services/getDic.ts                                                                             | TypeScript         |         38 |         12 |         26 |         76 |
+| /Users/dema/work/CostAccountingSys/src/typings.d.ts                                                                                   | TypeScript         |         21 |         10 |          3 |         34 |
+| /Users/dema/work/CostAccountingSys/src/utils/devicePixelRatio.js                                                                      | JavaScript         |         38 |         27 |          2 |         67 |
+| /Users/dema/work/CostAccountingSys/src/utils/format.ts                                                                                | TypeScript         |         22 |         10 |          5 |         37 |
+| /Users/dema/work/CostAccountingSys/src/utils/tableToExcel.ts                                                                          | TypeScript         |         56 |         22 |         25 |        103 |
+| /Users/dema/work/CostAccountingSys/src/utils/tableToMultiHeaderExcel.ts                                                               | TypeScript         |        221 |         10 |         51 |        282 |
+| /Users/dema/work/CostAccountingSys/src/utils/tooljs.ts                                                                                | TypeScript         |        220 |         39 |         97 |        356 |
+| /Users/dema/work/CostAccountingSys/src/utils/zhongtaiA.js                                                                             | JavaScript         |          1 |          8 |          0 |          9 |
+| /Users/dema/work/CostAccountingSys/src/utils/zhongtaiB.js                                                                             | JavaScript         |          1 |          8 |          0 |          9 |
+| /Users/dema/work/CostAccountingSys/src/utils/zhongtaiC.js                                                                             | JavaScript         |          1 |          8 |          0 |          9 |
+| /Users/dema/work/CostAccountingSys/tsconfig.json                                                                                      | JSON with Comments |          3 |          0 |          1 |          4 |
+| /Users/dema/work/CostAccountingSys/typings.d.ts                                                                                       | TypeScript         |          8 |          8 |          2 |         18 |
+| /Users/dema/work/CostAccountingSys/yarn-error.log                                                                                     | Log                |      8,469 |          0 |      1,293 |      9,762 |
+| Total                                                                                                                                 |                    |     44,380 |      2,971 |      8,813 |     56,164 |
++---------------------------------------------------------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+

+ 12 - 1
.umirc.ts

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2022-12-14 14:14:32
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-23 11:20:10
+ * @LastEditTime: 2024-12-05 17:33:15
  * @FilePath: /BudgetManaSystem/.umirc.ts
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -17,6 +17,7 @@ const path = require('path');
 
 
 export default defineConfig({
+  hash:true,
   antd: {
     configProvider: {
       prefixCls: 'cost-ant',
@@ -208,6 +209,16 @@ export default defineConfig({
       name: '月度信息采集2',
       component:'./monthlyInfoCollection/index',
     },
+    {
+      path:'/departmentCostCheck',
+      name: '科室损益查询',
+      component:'./departmentCostCheck/index',
+    },
+    {
+      path:'/departmentMzCostCalc',
+      name: '科室门住损益计算',
+      component:'./departmentMenzhuCostCalc/index',
+    },
     {
       path:'/specialDataImport',
       name: '填报数据导入',

+ 36 - 34
src/app.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2022-12-14 14:14:32
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-09-06 11:30:19
+ * @LastEditTime: 2024-11-04 17:47:29
  * @FilePath: /BudgetManaSystem/src/app.ts
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -273,7 +273,7 @@ export const request: RequestConfig = {
                 //console.log({code,'response.data':response.data});
                 return response.data
               } else {
-
+           
                 notification.error({
                   top: 72,
                   message: '提示',
@@ -282,7 +282,7 @@ export const request: RequestConfig = {
                   icon: <IconFont type="icon-jinggaotishi" />,
                   style: { padding: 16, borderRadius: 8 }
                 })
-                return false;
+               return false
               }
             }
 
@@ -354,47 +354,45 @@ const reportCheck = () => {
 
 
 
-// export function patchClientRoutes({ routes }: { routes: any }) {
-
-//   const treeLoop = (treeData: any) => {
+export function patchClientRoutes({ routes }: { routes: any }) {
 
-//     if (treeData.routes) {
-//       // const paths = [...new Array(100).keys()].map((a, index) => ({
-//       //   path: `${treeData.path == '/' ? '' : treeData.path}/reports/${index}`,
-//       //   exact: true,
-//       //   component: require('@/pages/platform/setting/reports/index.tsx').default,
-//       // }));
+  const treeLoop = (treeData: any) => {
 
-//       const lanhuPagePaths = [...new Array(5).keys()].map((a, index) => ({
-//         path: `${treeData.path == '/' ? '' : treeData.path}/static`,
-//         exact: true,
-//         element: <Static />,
-//       }));
+    if (treeData.routes) {
+      const paths = [...new Array(10).keys()].map((a, index) => ({
+        path: `${treeData.path == '/' ? '' : treeData.path}/reports/${index}`,
+        exact: true,
+        element: <Static />,
+      }));
 
-//       //console.log({paths});
+      const lanhuPagePaths = [...new Array(5).keys()].map((a, index) => ({
+        path: `${treeData.path == '/' ? '' : treeData.path}/static/${index}`,
+        exact: true,
+        element: <Static />,
+      }));
 
-//       // paths.forEach((a: any) => {
-//       //   treeData.routes.push(a);
-//       // });
+      paths.forEach((a: any) => {
+        treeData.routes.push(a);
+      });
 
-//       lanhuPagePaths.forEach((a: any) => {
-//         treeData.routes.push(a);
-//       });
+      lanhuPagePaths.forEach((a: any) => {
+        treeData.routes.push(a);
+      });
 
-//     }
-//     if (treeData.routes && treeData.routes.length > 0) {
-//       treeData.routes.forEach((a: any) => {
-//         treeLoop(a);
-//       })
-//     }
-
-//   }
+    }
+    if (treeData.routes && treeData.routes.length > 0) {
+      treeData.routes.forEach((a: any) => {
+        treeLoop(a);
+      })
+    }
 
+  }
 
+  treeLoop(routes[0]);
 
-//   treeLoop(routes[0]);
+  console.log({routes});
 
-// }
+}
 
 
 //布局配置
@@ -448,6 +446,7 @@ export const layout = ({ initialState, setInitialState }: { initialState: any, s
 
 
   return {
+    
     menuHeaderRender: false,
     disableMobile: true,
     onPageChange: () => { },
@@ -561,6 +560,9 @@ export const layout = ({ initialState, setInitialState }: { initialState: any, s
             });
 
             const { newTree, firstLeafNode, firstLeafNodePath } = transformTree(_menu);
+
+            console.log({newTree});
+            
             return newTree
 
           }

+ 3 - 5
src/components/KCIMLeftList/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2024-03-19 10:27:43
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-09-05 14:17:35
+ * @LastEditTime: 2024-09-09 11:28:25
  * @FilePath: /CostAccountingSys/src/components/KCIMLeftList/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -104,12 +104,11 @@ const findFirstLeafNodeWithParents: any = (node: any, children: string) => {
 export const KCIMLeftList = (props: KCIMLeftListProps) => {
 
     const { searchKey, placeholder = '请输入', onChange, listType = 'list', dataSource: data = [], icon, contentH = 500, rowKey = 'id', fieldNames = { title: 'title', key: 'key', children: 'children' } } = props;
-
+    
     const [dataSource, set_dataSource] = useState<ListItem[] | TreeNodeItem[]>([]);
     const [showList, set_showList] = useState<ListItem[] | TreeNodeItem[]>([]);
     const [currentSelected, set_currentSelected] = useState<undefined | any>(undefined);
     const [expandedKeys, setExpandedKeys] = useState<React.Key[]>([]);
-    const [searchValue, setSearchValue] = useState('');
     const [autoExpandParent, setAutoExpandParent] = useState(true);
     const [defaultSelectedKeys, set_defaultSelectedKeys] = useState<Key[]>([]);
 
@@ -126,7 +125,6 @@ export const KCIMLeftList = (props: KCIMLeftListProps) => {
     };
 
     const onExpand = (newExpandedKeys: React.Key[]) => {
-        console.log({newExpandedKeys});
         setExpandedKeys(newExpandedKeys);
         setAutoExpandParent(false);
     };
@@ -165,7 +163,7 @@ export const KCIMLeftList = (props: KCIMLeftListProps) => {
     return (
         <div className="KCIMLeftList">
             <div className='toolbar'>
-                <Input placeholder={placeholder} allowClear
+                <Input placeholder={placeholder} allowClear autoComplete='off'
                     suffix={
                         <IconFont style={{ color: '#99A6BF' }} type="iconsousuo" />
                     }

+ 1 - 1
src/components/ResizableContainer/style.less

@@ -13,7 +13,7 @@
         z-index: 999;
         right: 0;
         top:0;
-        width: 5px;
+        width: 1px;
         height:90vh;
         cursor: ew-resize;
         background-color:transparent;

+ 15 - 2
src/components/SQLEditor/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2024-01-04 13:46:15
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-01-08 19:58:03
+ * @LastEditTime: 2024-11-20 17:52:27
  * @FilePath: /CostAccountingSys/src/components/SQLEditor/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -91,7 +91,13 @@ const SQLEditor: React.FC<SQLEditorProps> = ({ name, label, rules, form, width =
     const editorDidMount = (editor:any, monaco:any) => {
         editor.focus();
     };
-
+    
+    const handleEditorWillMount = (monaco: any) => {
+        // 绑定事件确保粘贴未被拦截
+        monaco.editor.onDidPaste(() => {
+            console.log('Pasted content');
+        });
+    };
 
     useEffect(() => {
         setEditorValue(form.current.getFieldValue(name));
@@ -112,13 +118,20 @@ const SQLEditor: React.FC<SQLEditorProps> = ({ name, label, rules, form, width =
                     options={{
                         selectOnLineNumbers: true,
                         // autoIndent: true,
+                        
                         automaticLayout: true,
                         fontSize: 14,
+                        pasteAs:{
+                            enabled:true,
+                            showPasteSelector:'afterPaste'
+                        }
                     }}
+                
                     width={width}
                     height={height}
                     onChange={handleSQLEditorChange}
                     editorDidMount={editorDidMount}
+                    editorWillMount={handleEditorWillMount}
                 />
                 <div className='editerFooter'>
                        <div className='a' onClick={()=>copyHandle()}>原文复制</div>

+ 10 - 0
src/global.less

@@ -24,6 +24,16 @@ body {
 }
 
 
+/* 禁用所有输入框的自动填充背景 */
+input:-webkit-autofill,
+textarea:-webkit-autofill,
+select:-webkit-autofill {
+  -webkit-box-shadow: 0 0 0 1000px white inset !important;
+  box-shadow: 0 0 0 1000px white inset !important;
+  -webkit-text-fill-color: #000 !important;
+}
+
+
 
 
 .cost-ant-space-item {

+ 3 - 3
src/pages/baseInfoMana/checkGroupMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-10-13 11:17:25
+ * @LastEditTime: 2024-09-09 10:57:09
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -202,7 +202,7 @@ export default function FenyeTemplate() {
                 <div className='filter'>
                     <div className='filterItem' style={{ marginRight: 16, width: 205 }}>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'请输入查核组名称'} allowClear
+                        <Input placeholder={'请输入查核组名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }
@@ -226,7 +226,7 @@ export default function FenyeTemplate() {
                     </div>
                     <div className='filterItem' style={{ marginRight: 16, width: 220 }}>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 组长名称:</span>
-                        <Input placeholder={'请输入'} allowClear
+                        <Input placeholder={'请输入'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 1 - 1
src/pages/baseInfoMana/checkGroupMana/tableSelector.tsx

@@ -48,7 +48,7 @@ const TableSelecter = ({tableSelecterColumn, record,open,title,onVisibleChange,r
     
         return (
             <div >
-                <Input placeholder={'请输入项目名称'} allowClear
+                <Input placeholder={'请输入项目名称'} allowClear autoComplete='off'
                     suffix={
                         <IconFont style={{ color: '#99A6BF' }} type="iconsousuo" />
                     }

+ 2 - 2
src/pages/baseInfoMana/empMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-10-13 16:40:53
+ * @LastEditTime: 2024-09-09 10:56:43
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -284,7 +284,7 @@ export default function FenyeTemplate() {
                 <div className='filter'>
                     <div className='filterItem' style={{ marginRight: 16, width: 220 }}>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'请输入姓名/工号'} allowClear
+                        <Input placeholder={'请输入姓名/工号'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 1 - 1
src/pages/baseInfoMana/empMana/tableSelector.tsx

@@ -178,7 +178,7 @@ const TableSelecter = ({ tableSelecterType, record, open, title, onVisibleChange
 
         return (
             <div >
-                <Input placeholder={tableSelecterType == 'UNIT'?'请输入单位名称':'请输入查核组名称'} allowClear
+                <Input placeholder={tableSelecterType == 'UNIT'?'请输入单位名称':'请输入查核组名称'} allowClear autoComplete='off'
                     suffix={
                         <IconFont style={{ color: '#99A6BF' }} type="iconsousuo" />
                     }

+ 2 - 2
src/pages/baseInfoMana/unitMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-10-13 11:20:45
+ * @LastEditTime: 2024-09-09 10:56:09
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -235,7 +235,7 @@ export default function FenyeTemplate() {
                 <div className='filter'>
                     <div className='filterItem' style={{ marginRight: 16, width: 250 }}>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'请输入单位/负责人'} allowClear
+                        <Input placeholder={'请输入单位/负责人'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 1 - 1
src/pages/baseInfoMana/unitMana/tableSelector.tsx

@@ -127,7 +127,7 @@ const TableSelecter = ({ tableSelecterType, record, open, title, onVisibleChange
 
         return (
             <div >
-                <Input placeholder={'请输入名称'} allowClear
+                <Input placeholder={'请输入名称'} allowClear autoComplete='off'
                     suffix={
                         <IconFont style={{ color: '#99A6BF' }} type="iconsousuo" />
                     }

+ 23 - 5
src/pages/baseSetting/accountingAccountSet/accountingSubMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-05-28 15:45:55
+ * @LastEditTime: 2024-10-12 10:38:26
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -72,6 +72,24 @@ let currentRow: any = undefined;
  }
 
 
+ function sortTreeByCode(tree:any[], codeKey = 'accountingCode', childrenKey = 'children') {
+    // 首先对当前层级的节点按照 codeKey 进行排序
+    tree.sort((a, b) => {
+        return Number(a[codeKey]) - Number(b[codeKey]); // 按照 code 从小到大排序
+    });
+
+    // 然后对于每个节点的子节点,不进行排序,只递归下去
+    tree.forEach(node => {
+        if (node[childrenKey] && node[childrenKey].length > 0) {
+            sortTreeByCode(node[childrenKey], codeKey, childrenKey); // 递归处理子节点
+        }
+    });
+
+    return tree; // 返回排序后的树
+}
+
+
+
 export default function AccountingSubMana() {
 
     const [tableDataFilterParams, set_tableDataFilterParams] = useState<any | undefined>({ accountType: 1 });
@@ -154,7 +172,7 @@ export default function AccountingSubMana() {
 
     const getTableData = async (params: any) => {
         const {filter} = params;
-        const resp = await getAccountingSubjectList({ ...params, accountType });
+        const resp = await getAccountingSubjectList({ ...params, accountType,pageSize:500 });
         if (resp) {
             let data = [];
             if(filter){
@@ -163,7 +181,7 @@ export default function AccountingSubMana() {
                 data = renameChildListToChildren(resp.list, 'child')
             }
             return {
-                data:data,
+                data:sortTreeByCode(data),
                 success: true,
                 total: resp.totalCount,
                 pageSize: resp.pageSize,
@@ -425,7 +443,7 @@ export default function AccountingSubMana() {
                 <div className='filter' style={{ display: 'flex', flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center',marginBottom:16 }}>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'会计科目编码/名称'} allowClear
+                        <Input placeholder={'会计科目编码/名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }
@@ -456,7 +474,7 @@ export default function AccountingSubMana() {
             </div>
 
             <div>
-                <KCIMTable columns={columns as ProColumns[]} scroll={{ y: 'calc(100vh - 270px)' }} actionRef={tableRef} rowKey='id' params={tableDataFilterParams} request={(params) => getTableData(params)} />
+                <KCIMTable pagination={false} columns={columns as ProColumns[]} scroll={{ y: 'calc(100vh - 270px)' }} actionRef={tableRef} rowKey='id' params={tableDataFilterParams} request={(params) => getTableData(params)} />
             </div>
         </KCIMPagecontainer>
     )

+ 24 - 7
src/pages/baseSetting/accountingAccountSet/accountingSubMap/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-19 17:12:32
+ * @LastEditTime: 2024-10-12 16:04:21
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -54,7 +54,24 @@ const tableSelectorColumns = [
         title: '成本收入项目',
         dataIndex: 'name',
     },
-]
+];
+
+
+function sortTreeByCode(tree:any[], codeKey = 'accountingCode', childrenKey = 'children') {
+    // 首先对当前层级的节点按照 codeKey 进行排序
+    tree.sort((a, b) => {
+        return Number(a[codeKey]) - Number(b[codeKey]); // 按照 code 从小到大排序
+    });
+
+    // 然后对于每个节点的子节点,不进行排序,只递归下去
+    tree.forEach(node => {
+        if (node[childrenKey] && node[childrenKey].length > 0) {
+            sortTreeByCode(node[childrenKey], codeKey, childrenKey); // 递归处理子节点
+        }
+    });
+
+    return tree; // 返回排序后的树
+}
 
 
 let currentRow:any = undefined;
@@ -126,7 +143,7 @@ export default function AccountingSubMap() {
         },
         {
             title: '会计科目编码',
-            width:120,
+            width:300,
             dataIndex: 'accountingCode',
         },
         {
@@ -168,7 +185,7 @@ export default function AccountingSubMap() {
 
     const getTableData = async (params: any) => {
         const {filter} = params;
-        const resp = await getAccountProductConnectList({ ...params, accountType });
+        const resp = await getAccountProductConnectList({ ...params, accountType,pageSize:500 });
         if (resp) {
             let data = [];
             if(filter){
@@ -177,7 +194,7 @@ export default function AccountingSubMap() {
                 data = renameChildListToChildren(resp.list, 'child')
             }
             return {
-                data: data,
+                data: sortTreeByCode(data),
                 success: true,
                 total: resp.totalCount,
                 pageSize: resp.pageSize,
@@ -259,7 +276,7 @@ export default function AccountingSubMap() {
                <div className='filter' style={{ display: 'flex', flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'会计科目编码/名称'} allowClear
+                        <Input placeholder={'会计科目编码/名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }
@@ -286,7 +303,7 @@ export default function AccountingSubMap() {
             </div>
 
             <div>
-                <KCIMTable columns={(accountType == 1?columns:columnsTwo) as ProColumns[]} scroll={{ y: 'calc(100vh - 230px)' }} actionRef={tableRef} rowKey='id' params={tableDataFilterParams} request={(params) => getTableData(params)} />
+                <KCIMTable pagination={false} columns={(accountType == 1?columns:columnsTwo) as ProColumns[]} scroll={{ y: 'calc(100vh - 230px)' }} actionRef={tableRef} rowKey='id' params={tableDataFilterParams} request={(params) => getTableData(params)} />
             </div>
         </KCIMPagecontainer>
     )

+ 3 - 3
src/pages/baseSetting/accountingAccountSet/chargeItemMap/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-12-01 14:56:59
+ * @LastEditTime: 2024-09-09 10:55:13
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -317,7 +317,7 @@ const ChargeItemMap = () => {
 
             <div className='left'>
                 <div className='toolbar'>
-                    <Input placeholder={'会计科目名称'} allowClear
+                    <Input placeholder={'会计科目名称'} allowClear autoComplete='off'
                         suffix={
                             <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} />
                         }
@@ -396,7 +396,7 @@ const ChargeItemMap = () => {
                     <div className='filter'>
                         <div className='filterItem'>
                             <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                            <Input placeholder={'收费项目名称'} allowClear
+                            <Input placeholder={'收费项目名称'} allowClear autoComplete='off'
                                 suffix={
                                     <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('itemName')} />
                                 }

+ 1 - 1
src/pages/baseSetting/accountingAccountSet/costIncomeProjectMana/index.tsx

@@ -255,7 +255,7 @@ export default function CostIncomeProjectMana() {
                 <div className='filter'>
                     <div className='filterItem' style={{ marginLeft: 16, width: 205 }}>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'成本项目名称'} allowClear
+                        <Input placeholder={'成本项目名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 2 - 2
src/pages/baseSetting/costAllocationSet/allocationLevelSet/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-23 10:27:22
+ * @LastEditTime: 2024-09-09 10:54:49
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -273,7 +273,7 @@ export default function AllocationLevelSet() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'分摊层级名称'} allowClear
+                        <Input placeholder={'分摊层级名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo"  style={{color:'#99A6BF'}} onClick={() => tableDataSearchHandle('name')} />
                             }

+ 1 - 1
src/pages/baseSetting/costAllocationSet/allocationParamsMap/index.tsx

@@ -409,7 +409,7 @@ export default function AllocationParamsMap() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'责任中心名称'} allowClear
+                        <Input placeholder={'责任中心名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('name')} />
                             }

+ 9 - 68
src/pages/baseSetting/costAllocationSet/costAllocationParamsDeal/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-07-31 15:01:30
+ * @LastEditTime: 2024-10-16 11:26:19
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -74,10 +74,11 @@ export default function CostAllocationParamsDeal(
         },
         {
             title: '数值',
+            align:'center',
             dataIndex: 'valueNum',
             renderText(num, record, index, action) {
                 return (
-                    <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center' }}>
+                    <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center',justifyContent:'flex-end',paddingRight:'30%' }}>
                         {
                             (currentEditRow && currentEditRow.id == record.id) && (
                                 <>
@@ -99,7 +100,7 @@ export default function CostAllocationParamsDeal(
                         {
                             (!currentEditRow || (currentEditRow && currentEditRow.id != record.id)) && (
                                 <>
-                                    <div>{num}</div>
+                                    <div>{num.toFixed(2)}</div>
                                     <img onClick={() => set_currentEditRow(record)} style={{ width: 16, height: 16, display: 'inline-block', marginLeft: 8, cursor: 'pointer' }} src={require('../../../../../static/editIcon.png')} />
                                 </>
                             )
@@ -116,7 +117,6 @@ export default function CostAllocationParamsDeal(
                 return `[${responsibilityCode}]${responsibilityName}`
             },
         },
-        
         {
             title: '操作',
             key: 'option',
@@ -297,7 +297,8 @@ export default function CostAllocationParamsDeal(
                                     },
                                 ]}
                                 label="复制数据年月"
-                                fieldProps={{ picker: 'month', locale: locale, format: 'YYYY-MM' }}
+                                fieldProps={{ picker: 'month', locale: locale, format: 'YYYY-MM',autoComplete:'off' }}
+
                             />
                             <ProFormDatePicker
                                 name="toDate"
@@ -309,7 +310,7 @@ export default function CostAllocationParamsDeal(
                                         message: '目标时间是必填项!',
                                     },
                                 ]}
-                                fieldProps={{ picker: 'month', locale: locale, format: 'YYYY-MM' }}
+                                fieldProps={{ picker: 'month', locale: locale, format: 'YYYY-MM',autoComplete:'off' }}
                             />
                             <ProFormSelect
                                 options={[
@@ -393,7 +394,7 @@ export default function CostAllocationParamsDeal(
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'分摊参数代码/名称'} allowClear
+                        <Input placeholder={'分摊参数代码/名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('shareParamCode')} />
                             }
@@ -416,67 +417,7 @@ export default function CostAllocationParamsDeal(
 
                         />
                     </div>
-                    {/* <div className="filterItem">
-                        {
-                            <div className="search">
-                                <span>核算年月:</span>
-                                <DatePicker
-                                    onChange={(data, dateString) => {
-                                        set_computeDate(dateString);
-                                        set_tableDataFilterParams({
-                                            ...tableDataFilterParams,
-                                            computeDate: dateString,
-                                        });
-                                    }}
-                                    picker="month"
-                                    locale={locale}
-                                    defaultValue={moment(`${new Date().getFullYear()}-${(new Date().getMonth() + 1).toString().padStart(2, '0')}`, 'YYYY-MM')}
-                                    format="YYYY-MM"
-                                    placeholder="选择年月"
-                                />
-                            </div>
-                        }
-                    </div>
-                    <div className='filterItem' style={{ marginLeft: 16 }}>
-                        <span className='label'>分摊参数:</span>
-                        <ProFormSelect
-                            noStyle
-                            allowClear
-                            placeholder="请选择"
-                            style={{ width: 160, marginRight: 16 }}
-                            request={async (params) => {
-                                const resp = await getCostshareparamList({ ...params, pageSize: 500 });
-                                if (resp) return resp.list.map((item: any) => ({ label: item.shareParamName, value: item.shareParamCode }))
-                                return [];
-                            }}
-                            fieldProps={{
-                                onChange(value, option) {
-                                    set_tableDataFilterParams({ ...tableDataFilterParams, shareParamCode: value })
-                                },
-                            }}
-                        />
-                    </div>
-                    <div className='filterItem' style={{ marginLeft: 16 }}>
-                        <span className='label'>责任中心:</span>
-                        <ProFormCascader
-                            noStyle
-                            allowClear
-                            placeholder="请选择"
-                            request={async () => {
-                                const resp = await getResponsibilityCenterList({ pageSize: 500 });
-                                if (resp) {
-                                    return resp.list
-                                }
-                                return [];
-                            }}
-                            fieldProps={{
-                                fieldNames: { label: 'responsibilityName', value: 'responsibilityCode', children: 'child', },
-                                onChange(value: any, option: any) {
-                                    set_tableDataFilterParams({ ...tableDataFilterParams, responsibilityCode: value ? value[value.length - 1] : '' })
-                                },
-                            }}
-                        />
-                    </div> */}
+            
                 </div>
                 <div className='btnGroup'>
                     <UpDataActBtn record type='COPY' />

+ 4 - 4
src/pages/baseSetting/costAllocationSet/costAllocationParamsSet/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-09-06 11:01:54
+ * @LastEditTime: 2024-09-11 15:24:17
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -18,7 +18,7 @@ import { createFromIconfontCN } from '@ant-design/icons';
 import { ActionType, ProFormDependency, ProFormInstance, ProFormText, ProFormSelect } from '@ant-design/pro-components';
 import { ModalForm } from '@ant-design/pro-form'
 import { ProColumns } from '@ant-design/pro-table';
-import { Input, message, Popconfirm, Modal,Switch } from 'antd';
+import { Input, message, Popconfirm, Modal,Switch,Tooltip } from 'antd';
 import { Key, useEffect, useRef, useState } from 'react';
 
 import 'moment/locale/zh-cn';
@@ -83,7 +83,7 @@ export default function CostAllocationParamsSet() {
             },
         },
         {
-            title: '启用',
+            title:()=><>启动<Tooltip title="停用的分摊参数在成本分摊报表里不显示"><IconFont style={{paddingLeft:6,fontSize:16,position:'relative',top:1}} type='iconshuoming' /></Tooltip></>,
             dataIndex: 'status',
             renderText(number, record) {
                 return <Switch checked={number} size='small' onChange={(bool)=>{
@@ -293,7 +293,7 @@ export default function CostAllocationParamsSet() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'成本分摊参数名称'} allowClear
+                        <Input placeholder={'成本分摊参数名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{color:'#99A6BF'}} onClick={() => tableDataSearchHandle('name')} />
                             }

+ 2 - 2
src/pages/baseSetting/costAllocationSet/idleCostSetting/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-23 10:30:12
+ * @LastEditTime: 2024-09-09 10:54:09
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -379,7 +379,7 @@ export default function IdleCostSetting() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'闲置成本项目编码/名称'} allowClear
+                        <Input placeholder={'闲置成本项目编码/名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 3 - 1
src/pages/baseSetting/costAllocationSet/revenueImputationSet/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-23 10:26:40
+ * @LastEditTime: 2024-10-15 15:28:19
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -72,6 +72,7 @@ export default function AccountingSubMana() {
         },
         {
             title: '开单科室分配比例',
+            align:'right',
             dataIndex: 'openDepartmentProportion',
         },
         {
@@ -83,6 +84,7 @@ export default function AccountingSubMana() {
         },
         {
             title: '执行科室比例',
+            align:'right',
             dataIndex: 'startDepartmentProportion',
         },
         {

+ 386 - 205
src/pages/baseSetting/otherItemSet/departmentCostCalc/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-09-06 13:57:10
+ * @LastEditTime: 2024-12-05 15:11:20
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -15,10 +15,10 @@ import { KCIMTable } from '@/components/KCIMTable';
 import { createFromIconfontCN } from '@ant-design/icons';
 
 
-import { ActionType, ProFormDependency, ProFormInstance, ProFormText, ProFormSelect, ProFormDigit } from '@ant-design/pro-components';
+import { ActionType, ProFormInstance } from '@ant-design/pro-components';
 import { ModalForm } from '@ant-design/pro-form'
 import { ProColumns } from '@ant-design/pro-table';
-import { Modal, message, Drawer, Tabs, Input, DatePicker,Popover } from 'antd';
+import { Modal, message, Drawer, Tabs, Input, DatePicker, Popover, Alert, Skeleton } from 'antd';
 import { Key, useEffect, useRef, useState } from 'react';
 import * as XLSX from 'xlsx';
 import { saveAs } from 'file-saver';
@@ -28,24 +28,23 @@ import locale from 'antd/es/date-picker/locale/zh_CN';
 
 
 
-import { addData, computeProfitReq, copyDataToSelectedType, delData, editData, getReportDataReq, getReportProjectSettingList, getResponsibleCenters, saveReportRelation } from './service';
+import { addData, computeProfitReq, getReportDataReq, getReportProjectSettingList, getResponsibleCenters, saveReportRelation } from './service';
 
 import './style.less';
-import TableTransfer from './transform';
+
 import React from 'react';
-import { cleanTree, getStringWidth } from '@/utils/tooljs';
-import { getDicDataBySysId } from '@/services/getDic';
+
+import { getDicDataBySysId, getParamsDataBySysId } from '@/services/getDic';
 import { KCIMLeftList } from '@/components/KCIMLeftList';
 import { formatMoneyNumber } from '@/utils/format';
 import { useModel } from '@umijs/max';
-
-
+import { getUserHasReports } from '@/pages/costAccounting/calcPageTemplate/service';
 
 const IconFont = createFromIconfontCN({
     scriptUrl: '',
 });
 
-let currentRow: any = undefined;
+
 
 function findAllParents(tree: any[]) {
     let parents: any[] = [];
@@ -64,7 +63,7 @@ function findAllParents(tree: any[]) {
     return parents; // 返回所有父节点的数组
 }
 
-function countLeafNodes(trees:any[]) {
+function countLeafNodes(trees: any[]) {
     let leafCount = 0;
 
     // 遍历集合中的每棵树
@@ -75,7 +74,7 @@ function countLeafNodes(trees:any[]) {
     return leafCount;
 }
 
-function countLeafNodesRecursive(node:any) {
+function countLeafNodesRecursive(node: any) {
     // 如果当前节点没有子节点,说明它是一个叶子节点
     if (!node.children || node.children.length === 0) {
         return 1;
@@ -169,28 +168,99 @@ function processTree(originalData: any[]) {
 }
 
 // 递归函数,用于处理多层级标题
-function generateColumns(item: any, titleIndex = 0) {
-    const column: any = {
-        title: item.reportName,
-        dataIndex: `${item.reportId}`,
-        key: `${item.reportId}`,
-        // align: 'center',
+function generateColumns(item: any, titleIndex = 0, title: string, hideRatioColumns = false) {
+    // 检查是否需要隐藏"占比"列,如果title包含"占比",且hideRatioColumns为true,则返回null
+    if (hideRatioColumns && item[`${title}`].includes('占比')) {
+        return null;
+    }
 
+    const column: any = title == 'responsibilityName' ? {
+        title: item[`${title}`],
+        dataIndex: `${item.responsibilityCode}`,
+        key: `${item.responsibilityCode}`,
+        align: (item.responsibilityCode.indexOf('amount') != -1) ? 'right' : 'right',
+        ellipsis: true,
+        renderText(num: number, record: any) {
+            if (item.responsibilityCode.indexOf('amount') != -1) {
+                return formatMoneyNumber(num);
+            } else {
+                return num;
+            }
+        },
+    } : {
+        title: item[`${title}`],
+        ellipsis: true,
+        dataIndex: `${item[`reportId`]}`,
+        key: `${item[`reportId`]}`,
+        align: 'right',
     };
 
+    // 递归处理子列
     if (item.childTitle && Array.isArray(item.childTitle) && item.childTitle.length > 0) {
-        column.children = item.childTitle.map((a: any, aindex: number) => generateColumns(a, titleIndex + 1));
+        column.children = item.childTitle
+            .map((a: any, aindex: number) => generateColumns(a, titleIndex + 1, title, hideRatioColumns))
+            .filter((col: any) => col !== null); // 过滤掉null项
+    }
+    if (item.child && Array.isArray(item.child) && item.child.length > 0) {
+        column.children = item.child
+            .map((a: any, aindex: number) => generateColumns(a, titleIndex + 1, title, hideRatioColumns))
+            .filter((col: any) => col !== null); // 过滤掉null项
     }
 
     return column;
 }
 
-// 主函数,生成表格列
-const generateTableColumns = (title: any[]) => {
-    return title.map((item: any, titleIndex: number) => generateColumns(item, titleIndex));
+
+
+
+
+function transformTreeData(tree: any[]) {
+    // 遍历整个树
+    return tree.map(node => {
+        // 解构出data中的字段并添加到当前节点
+        if (Array.isArray(node.data)) {
+            node.data.forEach((item: any) => {
+                // 将data数组中的每个对象转换成当前节点的属性
+                if (item.code && item.value !== undefined) {
+                    node[item.code] = item.value;
+                }
+            });
+        }
+
+        // 递归处理子节点,如果存在子节点
+        if (node.children) {
+            node.children = transformTreeData(node.children);
+        }
+
+        // 返回处理后的节点
+        return node;
+    });
+}
+
+const getNextUnexpandedKeys = (data: any[], expandedKeys: any[] = []) => {
+    let keys: any[] = [];
+
+    const traverse = (nodes: any) => {
+        for (const node of nodes) {
+            // 如果当前节点还没有展开,就把它加入 keys
+            if (!expandedKeys.includes(node.id)) {
+                keys.push(node.id);
+            }
+
+            // 如果当前节点已经展开,继续遍历子节点
+            if (node.children && expandedKeys.includes(node.id)) {
+                traverse(node.children);
+            }
+        }
+    };
+
+    traverse(data);
+
+    return keys;
 };
 
 
+
 export default function DepartmentCostCalc() {
 
     const [tableDataFilterParams, set_tableDataFilterParams] = useState<any | undefined>({ reportType: 0 });
@@ -198,8 +268,8 @@ export default function DepartmentCostCalc() {
     const formRef = useRef<ProFormInstance>();
     const [tabs, set_tabs] = useState<any[]>([]);
 
-    const { initialState,setInitialState } = useModel('@@initialState');
-    const [computeDate, set_computeDate] = useState<string>(initialState?initialState.computeDate:'');
+    const { initialState, setInitialState } = useModel('@@initialState');
+    const [computeDate, set_computeDate] = useState<string>(initialState ? initialState.computeDate : '');
     const [responsibleCenters, set_responsibleCenters] = useState<any[]>([]);
     const [currentTabKey, set_currentTabKey] = useState<any | undefined>(undefined);
     const [currentTab, set_currentTab] = useState<any | undefined>(undefined);
@@ -209,43 +279,57 @@ export default function DepartmentCostCalc() {
     const [drawerTableVisible, set_drawerTableVisible] = useState(false);
     const [dataSource, set_dataSource] = useState<any[]>([]);
     const [tableColumns, set_tableColumns] = useState<any[]>([]);
+    const [calcResultText, set_calcResultText] = useState<undefined | string>(undefined);
+    const [loadingtransform, set_loadingtransform] = useState(false);
+    const [ifShowPercent, set_ifShowPercent] = useState(true);
+
     const columns: ProColumns[] = [
 
         {
             title: '报表项目名称',
             dataIndex: 'reportName',
             width: '50%',
+            ellipsis: true,
             renderText(text, record, index, action) {
-                const {description} = record;
-                return description?<Popover content={description}><span style={{cursor:'pointer'}}>{text}</span><IconFont className="hover-icon" style={{fontSize:16,color:'#17181a',paddingLeft:4,position:'relative',top:1}} type={'iconshuoming'} /></Popover>:text
+                const { description } = record;
+                return description ? <Popover content={() => <div dangerouslySetInnerHTML={{ __html: description }} />}><span style={{ cursor: 'pointer' }}>{text}</span><IconFont className="hover-icon" style={{ fontSize: 16, color: '#17181a', paddingLeft: 4, position: 'relative', top: 1 }} type={'iconshuoming'} /></Popover> : text
             },
         },
         {
             title: '金额(元)',
-            align:'right',
+            align: 'right',
             dataIndex: 'amount',
-            renderText(num,record) {
-                if (record.children) {
+            renderText(num, record) {
+                const { calcType } = record;
+                if (record.children && calcType == '0') {
                     return <React.Fragment></React.Fragment>
-                }else{
+                } else {
                     return formatMoneyNumber(num);
-                } 
+                }
             },
         },
         {
             title: '占比',
-            align:'right',
+            align: 'right',
+            hideInTable: !ifShowPercent,
             dataIndex: 'percent',
-            renderText(num,record) {
-                if (record.children) {
+            renderText(num, record) {
+                const { calcType } = record;
+                if (record.children && calcType == '0') {
                     return <React.Fragment></React.Fragment>
-                }else{
-                    return `${((num * 100).toFixed(2))}%`
-                } 
-                
+                } else {
+                    return num != null ? `${((num * 100).toFixed(2))}%` : num
+                }
+
             },
         },
-    ]
+    ];
+
+
+    // 主函数,生成表格列
+    const generateTableColumns = (title: any[], titleKeyName: string) => {
+        return title.map((item: any, titleIndex: number) => generateColumns(item, titleIndex, titleKeyName, !ifShowPercent));
+    };
 
 
     const getTableData = async (params: any) => {
@@ -258,14 +342,20 @@ export default function DepartmentCostCalc() {
                 const filterData = searchTree(resp, filter);
                 const allParents = findAllParents(filterData);
 
-                set_allParentsKeys([...(allParents.map((a: any) => a.id))])
+                set_allParentsKeys([...(allParents.map((a: any) => a.id))]);
+                set_dataSource([...filterData]);
                 return {
                     data: filterData,
                     success: true,
                 }
             }
-            const allParents = findAllParents(resp);
-            set_allParentsKeys([...(allParents.map((a: any) => a.id))])
+            if (currentTab.value == '1') {
+                const allParents = findAllParents(resp);
+                set_allParentsKeys([...(allParents.map((a: any) => a.id))]);
+
+            }
+            set_dataSource([...resp]);
+
             return {
                 data: resp,
                 success: true,
@@ -274,7 +364,13 @@ export default function DepartmentCostCalc() {
         return []
     }
 
-
+    const getIfshowPercent = async () => {
+        const { systemId } = JSON.parse(localStorage.getItem('currentSelectedTab') as string)
+        const resp = await getParamsDataBySysId(systemId, '1851077044079824896');
+        if (resp) {
+            set_ifShowPercent(resp.value == '1' ? true : false);
+        }
+    }
 
 
     const onTabChanged = (key: Key) => {
@@ -285,8 +381,9 @@ export default function DepartmentCostCalc() {
 
     const getTabs = async () => {
 
-        const { systemId } = JSON.parse((localStorage.getItem('currentSelectedTab')) as string)
-        const resp = await getDicDataBySysId(systemId, 'PROFIT_REPORT_TYPE');
+        // const { systemId } = JSON.parse((localStorage.getItem('currentSelectedTab')) as string)
+        // const resp = await getDicDataBySysId(systemId, 'PROFIT_REPORT_TYPE');
+        const resp = await getUserHasReports();
         if (resp) {
             const { dataVoList } = resp;
             const tempArr = dataVoList.map((a: any) => ({ label: a.name, key: Number(a.code), value: a.value }));
@@ -316,6 +413,35 @@ export default function DepartmentCostCalc() {
         })
     }
 
+    const onekeyComputeProfitHandle = async () => {
+        Modal.confirm({
+            title: '注意',
+            content: '一键计算操作会覆盖当月已计算的数据,是否继续操作?',
+            okText: '确定',
+            cancelText: '取消',
+            onOk: async () => {
+                try {
+                    const promises = tabs.map(tab => computeProfitReq(computeDate, tab.key));  // 对每个tab创建一个请求
+                    const results = await Promise.all(promises);  // 等待所有请求完成
+
+                    const allSuccess = results.every(resp => resp);  // 检查所有请求是否都成功
+                    if (allSuccess) {
+                        message.success('操作成功!');
+                        set_calcResultText('一键计算成功!');
+                    } else {
+                        set_calcResultText('一键计算部分失败!');
+                    }
+
+                    tableRef.current?.reload();  // 重新加载表格数据
+                } catch (error) {
+                    message.error('操作失败,请重试!');
+                    set_calcResultText('一键计算失败!');
+                }
+            },
+        });
+    };
+
+
     const computeProfitHandle = async () => {
 
         Modal.confirm({
@@ -328,7 +454,10 @@ export default function DepartmentCostCalc() {
                 const resp = await computeProfitReq(computeDate, currentTabKey);
                 if (resp) {
                     message.success('操作成功!');
+                    set_calcResultText('计算成功!');
                     tableRef.current?.reload();
+                } else {
+                    set_calcResultText('计算失败!');
                 }
             },
         })
@@ -336,183 +465,219 @@ export default function DepartmentCostCalc() {
 
     const openTableDataDrawer = async () => {
         set_drawerTableVisible(true);
-        const resp = await getReportDataReq(currentTabKey, computeDate);
-        if (resp) {
-            const { title = [], data = [] } = resp;
-            const defaultColumns = [{
-                title: '科室名称',
-                dataIndex: 'responsibilityName',
-                key: 'responsibilityName',
-                width: 220,
-                fixed: 'left'
-            }];
-
-            const tableColumns = generateTableColumns(title);
-
-            const dataSource = processTree(data);
-            set_tableColumns([...defaultColumns, ...tableColumns]);
-
-            set_dataSource(dataSource);
-            
-            // console.log({ columns: [...defaultColumns, ...tableColumns], dataSource })
+        set_loadingtransform(true);
+        if (currentTab.value == '3') {
+            const resp = await getReportDataReq(currentTabKey, computeDate, '3');
+            if (resp) {
+                const { title = [], data = [] } = resp;
+                const defaultColumns: ProColumns[] = [
+                    {
+                        title: '报表项目名称',
+                        dataIndex: 'reportName',
+                        key: 'reportName',
+                        width: 220,
+                        fixed: 'left'
+                    }
+                ];
+
+                const tableColumns = generateTableColumns(title, 'responsibilityName');
+                const dataSource = transformTreeData(data);
+                set_tableColumns([...defaultColumns, ...tableColumns]);
+                set_dataSource(dataSource);
+                set_loadingtransform(false);
+                // console.log({ columns: [...defaultColumns, ...tableColumns], dataSource })
 
-        }
-
-    }
-
-
-const getHeaderRows = (columns: any[], level = 0, headerRows:any[] = [], maxLevel = 0) => {
-    headerRows[level] = headerRows[level] || [];
-    columns.forEach((col: { title: any; children: any; }) => {
-        const colSpan = getColSpan(col);
-        headerRows[level].push({ title: col.title, colSpan, rowSpan: col.children ? 1 : maxLevel - level });
-        if (col.children) {
-            getHeaderRows(col.children, level + 1, headerRows, maxLevel);
-        } else {
-            // 填充空白单元格
-            for (let i = level + 1; i < maxLevel; i++) {
-                headerRows[i] = headerRows[i] || [];
-                headerRows[i].push({ title: '', colSpan: 1, rowSpan: 1 });
             }
-        }
-    });
-    return headerRows;
-};
-
-const getColSpan:any = (col: { children: any[]; }) => {
-    if (!col.children) return 1;
-    return col.children.reduce((sum, child) => sum + getColSpan(child), 0);
-};
-
-const getMaxLevel = (col: any) => {
-    if (!col.children) return 1;
-    return 1 + Math.max(...col.children.map(getMaxLevel));
-};
-
-const extractLeafColumns = (columns: any[]) => {
-    let leafColumns: any[] = [];
-    columns.forEach(col => {
-        if (col.children) {
-            leafColumns = leafColumns.concat(extractLeafColumns(col.children));
         } else {
-            leafColumns.push(col);
-        }
-    });
-    return leafColumns;
-};
+            const resp = await getReportDataReq(currentTabKey, computeDate, currentTab.value);
+            if (resp) {
+                const { title = [], data = [] } = resp;
+                const defaultColumns = [{
+                    title: '科室名称',
+                    dataIndex: 'responsibilityName',
+                    key: 'responsibilityName',
+                    width: 220,
+                    fixed: 'left'
+                }];
+
+                const tableColumns = generateTableColumns(title, 'reportName');
+                const dataSource = processTree(data);
+                set_tableColumns([...defaultColumns, ...tableColumns]);
+
+                set_dataSource(dataSource);
+                set_loadingtransform(false);
+
+                // console.log({ columns: [...defaultColumns, ...tableColumns], dataSource })
 
-const addRowWithIndentation = (record: any, level: number, leafColumns: any[], worksheetData: any[]) => {
-    const row = leafColumns.map(col => record[col.dataIndex] ?? '');
-    row[0] = ' '.repeat(level * 4) + row[0]; // 在第一列前添加缩进空格以表示层级
-    worksheetData.push(row);
-    if (record.children) {
-        record.children.forEach((child: any) => addRowWithIndentation(child, level + 1, leafColumns, worksheetData));
+            }
+        }
     }
-};
 
-const handleExport = () => {
-    try {
-        const workbook = XLSX.utils.book_new();
-        const worksheetData: any[] = [];
 
-        // 获取最大层级
-        const maxLevel = tableColumns.reduce((max, col) => Math.max(max, getMaxLevel(col)), 0);
-
-        // 生成多层级表头
-        const headerRows = getHeaderRows(tableColumns, 0, [], maxLevel);
-
-        // 构建表头行
-        headerRows.forEach((row: any, rowIndex) => {
-            const rowData: string[] = [];
-            row.forEach((cell: { title: any; colSpan: number; rowSpan: number; }) => {
-                rowData.push(cell.title);
-                for (let i = 1; i < cell.colSpan; i++) {
-                    rowData.push('');
-                }
-            });
-            worksheetData.push(rowData);
-        });
-
-        // 填充单层表头的空白行
-        if (maxLevel > 1) {
-            const numColumns = headerRows[0].reduce((sum: any, cell: { colSpan: any; }) => sum + cell.colSpan, 0);
-            for (let i = 1; i < maxLevel; i++) {
-                while (worksheetData[i].length < numColumns) {
-                    worksheetData[i].push('');
+    const getHeaderRows = (columns: any[], level = 0, headerRows: any[] = [], maxLevel = 0) => {
+        headerRows[level] = headerRows[level] || [];
+        columns.forEach((col: { title: any; children: any; }) => {
+            const colSpan = getColSpan(col);
+            headerRows[level].push({ title: col.title, colSpan, rowSpan: col.children ? 1 : maxLevel - level });
+            if (col.children) {
+                getHeaderRows(col.children, level + 1, headerRows, maxLevel);
+            } else {
+                // 填充空白单元格
+                for (let i = level + 1; i < maxLevel; i++) {
+                    headerRows[i] = headerRows[i] || [];
+                    headerRows[i].push({ title: '', colSpan: 1, rowSpan: 1 });
                 }
             }
-        }
-
-        // 提取最内层表头列
-        const leafColumns = extractLeafColumns(tableColumns);
-
-        // 添加数据并处理树结构
-        dataSource.forEach(record => addRowWithIndentation(record, 0, leafColumns, worksheetData));
-
-        const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);
+        });
+        return headerRows;
+    };
 
-        // 初始化合并单元格数组
-        worksheet['!merges'] = worksheet['!merges'] || [];
+    const getColSpan: any = (col: { children: any[]; }) => {
+        if (!col.children) return 1;
+        return col.children.reduce((sum, child) => sum + getColSpan(child), 0);
+    };
 
-        // 合并单元格
-        headerRows.forEach((row: any, rowIndex) => {
-            let colIndex = 0;
-            row.forEach((cell: { colSpan: number; rowSpan: number; }) => {
-                if (cell.colSpan > 1 || cell.rowSpan > 1) {
-                    worksheet['!merges'].push({
-                        s: { r: rowIndex, c: colIndex },
-                        e: { r: rowIndex + cell.rowSpan - 1, c: colIndex + cell.colSpan - 1 }
-                    });
-                }
-                colIndex += cell.colSpan;
-            });
-        });
+    const getMaxLevel = (col: any) => {
+        if (!col.children) return 1;
+        return 1 + Math.max(...col.children.map(getMaxLevel));
+    };
 
-        // 设置单元格对齐方式
-        Object.keys(worksheet).forEach(cell => {
-            if (cell[0] !== '!') {
-                worksheet[cell].s = {
-                    alignment: { vertical: 'center', horizontal: 'center' }
-                };
+    const extractLeafColumns = (columns: any[]) => {
+        let leafColumns: any[] = [];
+        columns.forEach(col => {
+            if (col.children) {
+                leafColumns = leafColumns.concat(extractLeafColumns(col.children));
+            } else {
+                leafColumns.push(col);
             }
         });
+        return leafColumns;
+    };
 
-        XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
-
-        const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' });
-        const s2ab = (s: string) => {
-            const buf = new ArrayBuffer(s.length);
-            const view = new Uint8Array(buf);
-            for (let i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF;
-            return buf;
-        };
-
-        saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), currentTab ? `${currentTab.label}.xlsx` : 'table_data.xlsx');
-    } catch (error) {
-        console.error('Export failed:', error);
-    }
-};
+    const addRowWithIndentation = (record: any, level: number, leafColumns: any[], worksheetData: any[]) => {
+        const row = leafColumns.map(col => {
+            let value = record[col.dataIndex] ?? '';
 
+            // 应用 renderText 函数来格式化导出数据,保持与表格渲染时一致
+            if (col.renderText) {
+                value = col.renderText(value, record);
+            }
 
+            return value;
+        });
 
+        // 在第一列前添加缩进空格以表示层级
+        row[0] = ' '.repeat(level * 4) + row[0]; // 每一级增加 4 个空格作为缩进
 
+        worksheetData.push(row);
 
+        // 递归处理子节点
+        if (record.children) {
+            record.children.forEach((child: any) => addRowWithIndentation(child, level + 1, leafColumns, worksheetData));
+        }
+    };
 
+    const handleExport = () => {
+        try {
+            const workbook = XLSX.utils.book_new();
+            const worksheetData: any[] = [];
+
+            // 获取最大层级
+            const maxLevel = tableColumns.reduce((max, col) => Math.max(max, getMaxLevel(col)), 0);
+
+            // 生成多层级表头
+            const headerRows = getHeaderRows(tableColumns, 0, [], maxLevel);
+
+            // 构建表头行
+            headerRows.forEach((row: any, rowIndex) => {
+                const rowData: string[] = [];
+                row.forEach((cell: { title: any; colSpan: number; rowSpan: number; }) => {
+                    rowData.push(cell.title);
+                    for (let i = 1; i < cell.colSpan; i++) {
+                        rowData.push('');
+                    }
+                });
+                worksheetData.push(rowData);
+            });
 
+            // 填充单层表头的空白行
+            if (maxLevel > 1) {
+                const numColumns = headerRows[0].reduce((sum: any, cell: { colSpan: any; }) => sum + cell.colSpan, 0);
+                for (let i = 1; i < maxLevel; i++) {
+                    while (worksheetData[i].length < numColumns) {
+                        worksheetData[i].push('');
+                    }
+                }
+            }
 
+            // 提取最内层表头列
+            const leafColumns = extractLeafColumns(tableColumns);
+
+            // 添加数据并处理树结构
+            dataSource.forEach(record => addRowWithIndentation(record, 0, leafColumns, worksheetData));
+
+            const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);
+
+            // 初始化合并单元格数组
+            worksheet['!merges'] = worksheet['!merges'] || [];
+
+            // 合并单元格
+            headerRows.forEach((row: any, rowIndex) => {
+                let colIndex = 0;
+                row.forEach((cell: { colSpan: number; rowSpan: number; }) => {
+                    if (cell.colSpan > 1 || cell.rowSpan > 1) {
+                        worksheet['!merges']!.push({  // 使用非空断言 '!'
+                            s: { r: rowIndex, c: colIndex },
+                            e: { r: rowIndex + cell.rowSpan - 1, c: colIndex + cell.colSpan - 1 }
+                        });
+                    }
+                    colIndex += cell.colSpan;
+                });
+            });
 
+            // 设置单元格对齐方式
+            Object.keys(worksheet).forEach(cell => {
+                if (cell[0] !== '!') {
+                    worksheet[cell].s = {
+                        alignment: { vertical: 'center', horizontal: 'center' }
+                    };
+                }
+            });
 
+            XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
 
+            const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' });
+            const s2ab = (s: string) => {
+                const buf = new ArrayBuffer(s.length);
+                const view = new Uint8Array(buf);
+                for (let i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF;
+                return buf;
+            };
 
+            saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), currentTab ? `${currentTab.label}.xlsx` : 'table_data.xlsx');
+        } catch (error) {
+            console.error('Export failed:', error);
+        }
+    };
 
 
+    const handleExpandNext = () => {
+        // 当前所有未展开的节点,第一层优先展开
+        const keysToExpand = getNextUnexpandedKeys(dataSource, allParentsKeys);
+        set_allParentsKeys((prev) => Array.from(new Set([...prev, ...keysToExpand])));
+    };
 
+    const handleCollapseAll = () => {
+        set_allParentsKeys([]);
+    };
 
 
     useEffect(() => {
         if (computeDate && currentTabKey != undefined) {
             getResponsibleCenterList(currentTabKey);
         }
+        set_allParentsKeys([]);
+        set_dataSource([]);
     }, [computeDate, currentTabKey]);
 
     useEffect(() => {
@@ -524,11 +689,14 @@ const handleExport = () => {
                 computeDate: computeDate
             })
         }
+        set_allParentsKeys([]);
+        set_dataSource([]);
     }, [currentSelectedRespon])
 
 
     useEffect(() => {
         getTabs();
+        getIfshowPercent();
     }, [])
 
     return (
@@ -537,13 +705,19 @@ const handleExport = () => {
             <Drawer className='drawerTable' contentWrapperStyle={{}} bodyStyle={{ padding: 16 }} title={false} open={drawerTableVisible} width={1000} headerStyle={{ display: 'none' }}>
                 <div className='header'>
                     <div className='title'>{currentTab ? currentTab.label : ''}(单位:元)</div>
+
                     <div className='btns'>
                         <span onClick={() => set_drawerTableVisible(false)}>关闭</span>
-                        <span className='close'  onClick={() => handleExport()}>导出</span>
-                   
+                        <span className='close' onClick={() => handleExport()}>导出</span>
+
                     </div>
                 </div>
-                <KCIMTable loading={dataSource.length == 0} expandable={{ defaultExpandAllRows: true }} className='departmentCostCalcReportTable' dataSource={dataSource} bordered pagination={false} scroll={{ x:countLeafNodes(tableColumns) * 120, y:`calc(100vh - 198px)` }} columns={tableColumns as ProColumns[]} rowKey='responsibilityCode' /> 
+                {/* {loadingtransform && <Skeleton />} */}
+                <KCIMTable loading={loadingtransform} expandable={{ defaultExpandAllRows: true }} className='departmentCostCalcReportTable'
+                    dataSource={dataSource} bordered pagination={false}
+                    scroll={{ x: countLeafNodes(tableColumns) * 200, y: `calc(100vh - ${84 + ((tableColumns.reduce((max, col) => Math.max(max, getMaxLevel(col)), 0)) * 38)}px)` }}
+                    columns={tableColumns as ProColumns[]} rowKey='id' />
+
             </Drawer>
 
             <div className='header'>
@@ -552,7 +726,7 @@ const handleExport = () => {
                     <DatePicker
                         onChange={(data, dateString) => {
                             set_computeDate(dateString);
-                            setInitialState((s:any)=>({...s,computeDate: dateString,}))
+                            setInitialState((s: any) => ({ ...s, computeDate: dateString, }))
                             set_tableDataFilterParams({
                                 ...tableDataFilterParams,
                                 computeDate: dateString,
@@ -562,9 +736,13 @@ const handleExport = () => {
                         locale={locale}
                         defaultValue={moment(computeDate, 'YYYY-MM')}
                         format="YYYY-MM"
+                        autoComplete="off"
                         placeholder="选择年月"
                     />
                 </div>
+                <div className='btnGoup'>
+                    <span className='onekeyCalcBtn' onClick={() => onekeyComputeProfitHandle()}>一键计算</span>
+                </div>
             </div>
             <div className='content'>
                 <Tabs
@@ -573,6 +751,7 @@ const handleExport = () => {
                     key={'key'}
                     onChange={(key) => onTabChanged(key)}
                 />
+                {calcResultText && <Alert showIcon onClose={() => set_calcResultText(undefined)} icon={<IconFont type={(calcResultText.indexOf('失败') != -1) ? 'icon-cuowutishi' : 'icon-chenggongtishi'} />} closable style={{ padding: '4px 12px', marginBottom: 16, borderRadius: 4, border: (calcResultText.indexOf('失败') != -1) ? '1px solid #73E6BF' : '', background: (calcResultText.indexOf('失败') != -1) ? '#FFF1F3' : '#EBFFF8' }} message={calcResultText} type={calcResultText.indexOf('失败') != -1 ? 'error' : 'success'} />}
                 <div className='inner'>
                     <div className='left'>
                         <KCIMLeftList
@@ -590,7 +769,7 @@ const handleExport = () => {
                         <div className='toolBar'>
                             <div className='filterItem' style={{ width: 228 }}>
                                 <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                                <Input placeholder={'报表项目代码/名称'} allowClear
+                                <Input placeholder={'报表项目代码/名称'} allowClear autoComplete='off'
                                     suffix={
                                         <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                                     }
@@ -613,24 +792,26 @@ const handleExport = () => {
                                 />
                             </div>
                             <div className='btnGroup'>
+                                <span className='btn' onClick={() => handleCollapseAll()}>全部折叠</span>
+                                <span className='btn' style={{ marginRight: 16 }} onClick={() => handleExpandNext()}>展开下一层</span>
                                 <span className='btn' onClick={() => openTableDataDrawer()}>报表数据</span>
                                 <span className='calc' onClick={() => computeProfitHandle()}>计算</span>
                             </div>
                         </div>
-                        <KCIMTable pagination={false} 
-                        rowClassName={(record) => (record.children ? 'has-children hover-row' : 'hover-row')}
-                        expandable={{
-                            defaultExpandAllRows: true, expandedRowKeys: allParentsKeys,
-                            onExpand(expanded, record) {
-                                const { id } = record;
-                                if (!expanded) {
-                                    const expandedKeys = allParentsKeys.filter(a => a != id);
-                                    set_allParentsKeys([...expandedKeys]);
-                                } else {
-                                    set_allParentsKeys([...allParentsKeys, id]);
-                                }
-                            },
-                        }} columns={columns as ProColumns[]} scroll={{ y: `calc(100vh - 302px)` }} actionRef={tableRef} rowKey='id' params={tableDataFilterParams} request={(params) => getTableData(params)} />
+                        <KCIMTable pagination={false}
+                            rowClassName={(record) => (record.children ? 'has-children hover-row' : 'hover-row')}
+                            expandable={{
+                                expandedRowKeys: allParentsKeys,
+                                onExpand(expanded, record) {
+                                    const { id } = record;
+                                    if (!expanded) {
+                                        const expandedKeys = allParentsKeys.filter(a => a != id);
+                                        set_allParentsKeys([...expandedKeys]);
+                                    } else {
+                                        set_allParentsKeys([...allParentsKeys, id]);
+                                    }
+                                },
+                            }} columns={columns as ProColumns[]} scroll={{ y: `calc(100vh - 302px)` }} actionRef={tableRef} rowKey='id' params={tableDataFilterParams} request={(params) => getTableData(params)} />
                     </div>
                 </div>
 

+ 3 - 3
src/pages/baseSetting/otherItemSet/departmentCostCalc/service.ts

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 16:31:27
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-04-24 14:49:44
+ * @LastEditTime: 2024-09-20 10:39:17
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/service.ts
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -98,8 +98,8 @@ export const getResponsibleCenters = (reportType:string) => {
 
 
 //获取报表数据
-export const getReportDataReq = (reportType:string,computeDate:string) => {
-  return request('/costAccount/costdepartmentprofit/computeProfitReport', {
+export const getReportDataReq = (reportType:string,computeDate:string,tabkey:string) => {
+  return request(tabkey == '3'?'/costAccount/costdepartmentprofit/getComputeProfitCollect':'/costAccount/costdepartmentprofit/computeProfitReport', {
     method: 'GET',
     params:{reportType,computeDate}
   });

+ 22 - 0
src/pages/baseSetting/otherItemSet/departmentCostCalc/style.less

@@ -48,6 +48,28 @@
     padding: 16px;
     background-color: #fff;
     border-bottom: 16px solid #F7F9FC;
+
+    .btnGoup {
+      &>span {
+        cursor: pointer;
+        display: inline-block;
+        color: #17181A;
+        line-height: 24px;
+        padding: 0 14px;
+        border-radius: 4px;
+        border: 1px solid #DAE2F2;
+        background: #FAFCFF;
+        margin-right: 8px;
+        font-weight: 400;
+        font-size: 14px;
+        color: #17181A;
+
+        &.onekeyCalcBtn {
+          color: #fff;
+          background: #3377FF;
+        }
+      }
+    }
   }
 
   .content {

+ 2 - 2
src/pages/baseSetting/otherItemSet/departmentCostCalc/transform.tsx

@@ -107,7 +107,7 @@ const TableTransfer = React.forwardRef(({ leftColumns, rightColumns, keyName, re
                 const initData = await getHasSetReportRelation({ reportId: record.id, relation: settingType });
                 if (initData) {
                     const hasSelectedKeys = initData.map((a: any) => a.code);
-                    console.log(flattenTreeData(resp.list));
+                   
                     const hasSelectedRows = flattenTreeData(resp.list).filter((a: any) => hasSelectedKeys.includes(a.accountingCode));
                     const selectedKeys = hasSelectedRows.map((a: any) => a.id)
                     // setSelectedKeys(selectedKeys);
@@ -277,7 +277,7 @@ const TableTransfer = React.forwardRef(({ leftColumns, rightColumns, keyName, re
                             size="small"
                             bordered={false}
                             rowKey={keyName}
-                            scroll={{ y: 280 }}
+                            scroll={{ y:`calc(100vh - )` }}
                             pagination={{ showTitle: false, pageSize: 9, showLessItems: false, simple: true, showTotal: () => false }}
                             tableAlertRender={false}
                             style={{ pointerEvents: listDisabled ? 'none' : undefined }}

+ 3 - 3
src/pages/baseSetting/otherItemSet/diySqlMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-04-12 11:19:08
+ * @LastEditTime: 2024-09-09 10:53:22
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -356,7 +356,7 @@ export default function DiySqlMana() {
             </div> */}
 
             <div className='left'>
-                <Input placeholder={'请输入类目名称'} allowClear
+                <Input placeholder={'请输入类目名称'} allowClear autoComplete='off'
                     suffix={
                         <IconFont style={{ color: '#99A6BF' }} type="iconsousuo" />
                     }
@@ -384,7 +384,7 @@ export default function DiySqlMana() {
                     <div className='filter'>
                         <div className='filterItem'>
                             <span className='label'>检索:</span>
-                            <Input placeholder={'sql说明'} style={{ width: 160 }} allowClear
+                            <Input placeholder={'sql说明'} style={{ width: 160 }} allowClear autoComplete='off'
 
                                 suffix={
                                     <IconFont style={{ color: '#99A6BF' }} type="iconsousuo" onClick={() => tableDataSearchHandle('sqlDefinition')} />

+ 57 - 53
src/pages/baseSetting/otherItemSet/reportItemSet/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-09-06 11:04:30
+ * @LastEditTime: 2024-11-08 11:54:36
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -118,7 +118,8 @@ export default function ReportItemSet() {
     const tableRef = useRef<ActionType>();
     const formRef = useRef<ProFormInstance>();
     const [tabs, set_tabs] = useState<any[]>([]);
-    const [reportType, set_reportType] = useState<Key|undefined>(undefined);
+    const [reportType, set_reportType] = useState<Key | undefined>(undefined);
+    const [calcTypes, setCalcTypes] = useState<any[]>([]);
     const columns: ProColumns[] = [
         {
             title: '报表项目名',
@@ -138,21 +139,9 @@ export default function ReportItemSet() {
         {
             title: '计算方式',
             dataIndex: 'calcType',
-            renderText(num, record) {
-                switch (num) {
-                    case 0:
-                        return <>不设置</>;
-                    case 1:
-                        return <>对应会计科目</>;
-                    case 2:
-                        return <>对应分摊层级</>;
-                    case 3:
-                        return <>小计</>;
-                    case 4:
-                        return <>计算公式</>;
-                    case 5:
-                        return <>按责任中心</>;
-                }
+            renderText:(num, record) => {
+                const temp = calcTypes.filter((a)=>a.code == num);
+                return temp.length>0?temp[0].name:''
             },
 
         },
@@ -176,7 +165,7 @@ export default function ReportItemSet() {
         // },
         {
             title: '计算公式',
-            width:300,
+            width: 300,
             dataIndex: 'calcFormula',
         },
         {
@@ -190,7 +179,7 @@ export default function ReportItemSet() {
                         return <>成本</>;
                 }
             },
-            
+
         },
         {
             title: '占比计算类型',
@@ -205,7 +194,7 @@ export default function ReportItemSet() {
                         return <>不计算</>;
                 }
             },
-            
+
         },
         {
             title: '排序',
@@ -215,18 +204,27 @@ export default function ReportItemSet() {
         {
             title: '说明',
             dataIndex: 'description',
-            ellipsis:true
+            ellipsis: true
+        },
+        {
+            title: '显示',
+            fixed: 'right',
+            width: 60,
+            dataIndex: 'hide',
+            renderText: (_: any, record: any) => {
+                return <Switch  size='small' checked={_ == 1} onChange={(bool) => updateTable({...record,hide:bool?1:0},'EDIT')} />
+            }
         },
         {
             title: '操作',
             key: 'option',
-            width: 160,
-            fixed:'right',
+            width: 200,
+            fixed: 'right',
             valueType: 'option',
             render: (_: any, record: any) => {
                 const { showAddRelation, parentId, calcType } = record;
 
-                const btnGroup = calcType == 0 ? [
+                const btnGroup = true ? [
                     <UpDataActBtn key={'addChild'} record={record} type='ADDCHILD' />,
                     <UpDataActBtn key={'act'} record={record} type='EDIT' />,
                     <Popconfirm
@@ -270,8 +268,8 @@ export default function ReportItemSet() {
 
 
     const getTableData = async (params: any) => {
-        const {reportType} = params;
-        if(reportType == undefined)return []
+        const { reportType } = params;
+        if (reportType == undefined) return []
         const resp = await getReportProjectSettingList({ ...params });
         if (resp) {
             return {
@@ -341,7 +339,7 @@ export default function ReportItemSet() {
                 ref={ref}
                 keyName={settingType == 1 ? `accountingCode` : settingType == 2 ? 'id' : 'responsibilityCode'}
                 record={record}
-                settingType={settingType}                                                                                                                                                                                                             
+                settingType={settingType}
                 onSave={(keys, rows, settingType) => onSaveHandle(keys, rows, record, settingType)}
                 leftColumns={transferTableColumn}
                 rightColumns={transferTableColumn}
@@ -382,7 +380,7 @@ export default function ReportItemSet() {
         }
         if (type == 'EDIT') {
             try {
-                const { reportName, sort, calcType = 0, calcFormula = '', isLoss, parentId, id,fraction,costType,description } = formVal;
+                const { reportName, sort, calcType = 0, calcFormula = '', isLoss, parentId, id, fraction, costType, description,hide } = formVal;
                 const result = {
                     id,
                     parentId,
@@ -394,7 +392,8 @@ export default function ReportItemSet() {
                     fraction,
                     costType,
                     isLoss: isLoss ? 1 : 0,
-                    description
+                    description,
+                    hide
                 };
                 const resp = await editData(result);
                 if (resp) {
@@ -473,12 +472,7 @@ export default function ReportItemSet() {
                                         name="calcType"
                                         label="计算类型"
                                         options={[
-                                            { label: '不设置', value: 0 },
-                                            { label: '对应会计科目', value: 1 },
-                                            { label: '对应分摊层级', value: 2 },
-                                            { label: '小计', value: 3 },
-                                            { label: '计算公式', value: 4 },
-                                            { label: '按责任中心', value: 5 },
+                                            ...(calcTypes.map((a)=>({label:a.name,value:Number(a.code)})))
                                         ]}
                                         placeholder="请选择状态"
                                         rules={[{ required: true, message: '请选择计算类型!' }]}
@@ -557,7 +551,7 @@ export default function ReportItemSet() {
                             name="toReportType"
                             label="复制到"
                             width="sm"
-                            options={tabs.map((a)=>({label:a.label,value:a.key}))}
+                            options={tabs.map((a) => ({ label: a.label, value: a.key }))}
                             placeholder="请选择"
                             rules={[{ required: true, message: '请选择复制到目标!' }]}
                         />
@@ -569,30 +563,45 @@ export default function ReportItemSet() {
 
     const onTabChanged = (key: Key) => {
         set_reportType(key);
-        set_tableDataFilterParams({...tableDataFilterParams,reportType:key})
+        set_tableDataFilterParams({ ...tableDataFilterParams, reportType: key })
     }
 
-    const getTabs = async ()=>{
-          
-          const {systemId} = JSON.parse((localStorage.getItem('currentSelectedTab')) as string)
-          const resp = await getDicDataBySysId(systemId,'PROFIT_REPORT_TYPE');
-          if(resp){
-              const {dataVoList} = resp;
-              set_tabs(dataVoList.map((a:any)=>({label:a.name,key:Number(a.code)})));
-              set_tableDataFilterParams({...tableDataFilterParams,reportType:dataVoList.length>0?dataVoList[0].code:undefined});
-              set_reportType(dataVoList.length>0?dataVoList[0].code:undefined);
-          }
+    const getTabs = async () => {
+
+        const { systemId } = JSON.parse((localStorage.getItem('currentSelectedTab')) as string)
+        const resp = await getDicDataBySysId(systemId, 'PROFIT_REPORT_TYPE');
+        if (resp) {
+            const { dataVoList } = resp;
+            set_tabs(dataVoList.map((a: any) => ({ label: a.name, key: Number(a.code) })));
+            set_tableDataFilterParams({ ...tableDataFilterParams, reportType: dataVoList.length > 0 ? dataVoList[0].code : undefined });
+            set_reportType(dataVoList.length > 0 ? dataVoList[0].code : undefined);
+        }
     }
 
 
 
 
     useEffect(() => {
+        const fetchData = async () => {
+            const { systemId } = JSON.parse(localStorage.getItem('currentSelectedTab') as string);
+            const resp = await getDicDataBySysId(systemId, 'REPORT_ITEM_CALC_TYPE');
+            setCalcTypes(resp?.dataVoList??[]);  // 假设 resp 返回的是一个键值对
+        };
+        fetchData();
         getTabs();
     }, [])
 
     return (
         <KCIMPagecontainer className='ReportItemSet' title={false}>
+            <div className='header'>
+                <div className='pageTitle'>报表项目设置</div>
+                <div className='btnGroup'>
+                    <span style={{ marginRight: 8, cursor: 'pointer' }} onClick={() => openRule()}><img style={{ width: 16, marginRight: 4, marginTop: -1 }} src={require('../../../../../static/tip.png')} />说明</span>
+                    <UpDataActBtn record={undefined} type='COPY' />
+                    <UpDataActBtn record={undefined} type='ADD' />
+                </div>
+            </div>
+
             <div className='toolBar' style={{ display: 'flex', flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>
                 <Tabs
                     defaultActiveKey={tabs.length > 0 ? tabs[0].key : undefined}
@@ -600,15 +609,10 @@ export default function ReportItemSet() {
                     key={'key'}
                     onChange={(key) => onTabChanged(key)}
                 />
-                <div className='btnGroup'>
-                    <span style={{ marginRight: 8, cursor: 'pointer' }} onClick={() => openRule()}><img style={{ width: 16, marginRight: 4, marginTop: -1 }} src={require('../../../../../static/tip.png')} />说明</span>
-                    <UpDataActBtn record={undefined} type='COPY' />
-                    <UpDataActBtn record={undefined} type='ADD' />
-                </div>
             </div>
 
             <div>
-                <KCIMTable pagination={false} scroll={{x:1700, y: `calc(100vh - 191px)` }} columns={columns as ProColumns[]} actionRef={tableRef} rowKey='id' params={tableDataFilterParams} request={(params) => getTableData(params)} />
+                <KCIMTable pagination={false} scroll={{ x: 1700, y: `calc(100vh - 191px)` }} columns={columns as ProColumns[]} actionRef={tableRef} rowKey='id' params={tableDataFilterParams} request={(params) => getTableData(params)} />
             </div>
         </KCIMPagecontainer>
     )

+ 31 - 14
src/pages/baseSetting/otherItemSet/reportItemSet/style.less

@@ -4,25 +4,19 @@
   background: #FFFFFF;
   border-radius: 4px;
 
-
-  .toolBar {
+  .header {
     display: flex;
     flex-direction: row;
     justify-content: space-between;
     align-items: center;
+    padding-top: 16px;
 
-    .filter {
-      display: flex;
-      flex-direction: row;
-      justify-content: flex-start;
-      align-items: center;
-
-      .filterItem {
-        display: flex;
-        flex-direction: row;
-        justify-content: center;
-        align-items: center;
-      }
+    .pageTitle {
+      height: 16px;
+      line-height: 16px;
+      font-weight: 500;
+      font-size: 16px;
+      color: #17181A;
     }
 
     .btnGroup {
@@ -47,5 +41,28 @@
         border: 1px solid #DAE2F2;
       }
     }
+
+  }
+
+
+  .toolBar {
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+    align-items: center;
+
+    .filter {
+      display: flex;
+      flex-direction: row;
+      justify-content: flex-start;
+      align-items: center;
+
+      .filterItem {
+        display: flex;
+        flex-direction: row;
+        justify-content: center;
+        align-items: center;
+      }
+    }
   }
 }

+ 1 - 1
src/pages/baseSetting/otherItemSet/visitsAndBedDayCostSetting/index.tsx

@@ -264,7 +264,7 @@ export default function VisitsAndBedDayCostSetting() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'对应值'} allowClear
+                        <Input placeholder={'对应值'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('name')} />
                             }

+ 1 - 1
src/pages/baseSetting/otherItemSet/wholeHospCostAndIncomeSet/index.tsx

@@ -18,7 +18,7 @@ import { createFromIconfontCN } from '@ant-design/icons';
 import { ActionType, ProFormDependency, ProFormInstance, ProFormText, ProFormSelect, ProFormDigit } from '@ant-design/pro-components';
 import { ModalForm } from '@ant-design/pro-form'
 import { ProColumns } from '@ant-design/pro-table';
-import { Input, message, Popconfirm, Form, Select } from 'antd';
+import { message, Popconfirm, Form, Select } from 'antd';
 import { Key, useEffect, useRef, useState } from 'react';
 
 import 'moment/locale/zh-cn';

+ 19 - 22
src/pages/baseSetting/responsibilityCenterSet/responsibilityCenter/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-09-06 13:22:08
+ * @LastEditTime: 2024-09-14 11:32:17
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -13,24 +13,20 @@ import KCIMPagecontainer from '@/components/KCIMPageContainer';
 import { KCIMTable } from '@/components/KCIMTable';
 
 import { createFromIconfontCN } from '@ant-design/icons';
-import FormItem from 'antd/es/form/FormItem';
-
 import { ActionType, ProFormDependency, ProFormInstance, ProFormText, ProFormSelect } from '@ant-design/pro-components';
-import { ModalForm, ProFormDigit, ProFormTextArea } from '@ant-design/pro-form'
+import { ModalForm, ProFormDigit } from '@ant-design/pro-form'
 import { ProColumns } from '@ant-design/pro-table';
-import { Input, message, Popconfirm,Popover,Switch } from 'antd';
+import { Input, message, Popconfirm,Popover,Switch,Tooltip } from 'antd';
 import { useEffect, useRef, useState } from 'react';
 
 import 'moment/locale/zh-cn';
-import locale from 'antd/es/date-picker/locale/zh_CN';
-
 
 
 import { addData, delData, editData, getApportionmentLevelListNoPage, getResponsibilityCenterList, getResponsibilityTypeReq, getStandardShareLevelReq } from './service';
 
 import './style.less';
-import KCIMUpload from '@/components/KCIMUpload';
-import { downloadTemplateReq, renameChildListToChildren } from '@/utils/tooljs';
+
+import {renameChildListToChildren } from '@/utils/tooljs';
 
 
 const IconFont = createFromIconfontCN({
@@ -81,7 +77,6 @@ export default function ResponsibilityCenter() {
     const tableRef = useRef<ActionType>();
     const formRef = useRef<ProFormInstance>();
     const columns: ProColumns[] = [
-
         {
             title: '责任中心名称',
             dataIndex: 'responsibilityName',
@@ -91,9 +86,9 @@ export default function ResponsibilityCenter() {
             renderText(_, record) {
                 const { isDefault, responsibilityName,isGatherCenter } = record;
                 // return isDefault == 1 ? <Tag>{`${responsibilityName}(是)`}</Tag> : responsibilityName
-                return (isDefault == 1||isGatherCenter == 1)?<Popover>
-                      {responsibilityName}<IconFont type='' />
-                </Popover>:responsibilityName
+                return (isDefault == 1||isGatherCenter == 1)?isGatherCenter == 1?<Popover content='汇总中心'>
+                      {responsibilityName} <img style={{width:14,height:14,position:'relative',left:6}} src={require('../../../../../static/huizong.png')} />
+                </Popover>:<>{responsibilityName}<img style={{width:14,height:14,position:'relative',top:-1,left:6}} src={require('../../../../../static/moren.png')} /></>:responsibilityName
             },
         },
         {
@@ -101,13 +96,13 @@ export default function ResponsibilityCenter() {
             ellipsis: true,
             dataIndex: 'responsibilityCode',
         },
-        {
-            title: '是否汇总中心',
-            dataIndex: 'isGatherCenter',
-            renderText(_, record) {
-                return <>{_ == 1 ? '是' : '否'}</>
-            },
-        },
+        // {
+        //     title: '是否汇总中心',
+        //     dataIndex: 'isGatherCenter',
+        //     renderText(_, record) {
+        //         return <>{_ == 1 ? '是' : '否'}</>
+        //     },
+        // },
         {
             title: '责任类型',
             ellipsis: true,
@@ -179,8 +174,10 @@ export default function ResponsibilityCenter() {
             dataIndex: 'sort',
         },
         {
-            title: '启用',
+            title:()=><>启用<Tooltip title="停用的责任中心在科室损益计算界面及科室损益报表里不显示"><IconFont style={{paddingLeft:6,fontSize:16,position:'relative',top:1}} type='iconshuoming' /></Tooltip></>,
             dataIndex: 'status',
+            fixed:'right',
+            width: 90,
             renderText(number, record) {
                 const {isGatherCenter} = record;
                 return isGatherCenter != 1?<Switch checked={number} size='small' onChange={(bool)=>{
@@ -532,7 +529,7 @@ export default function ResponsibilityCenter() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'责任中心编码/名称'} allowClear
+                        <Input placeholder={'责任中心编码/名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 2 - 2
src/pages/baseSetting/responsibilityCenterSet/responsibilityCenterConnect/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-05-28 15:58:00
+ * @LastEditTime: 2024-09-09 10:52:35
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -199,7 +199,7 @@ export default function ResponsibilityCenterConnect() {
             <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'责任中心名称'} allowClear
+                        <Input placeholder={'责任中心名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 80 - 51
src/pages/costAccounting/calcPageTemplate/columns.tsx

@@ -2,7 +2,7 @@ import { tableColumnsWidObj } from "@/constant";
 import { formatMoneyNumber, formatToPercentage } from "@/utils/format";
 import { createFromIconfontCN } from "@ant-design/icons";
 import { ProColumns } from "@ant-design/pro-components";
-import {Popover} from 'antd'
+import { Popover } from 'antd'
 import React from "react";
 
 const IconFont = createFromIconfontCN({
@@ -59,7 +59,7 @@ export const chargeItemCostCalc: ProColumns[] = [
     {
         title: '收费项目名称',
         dataIndex: 'name',
-        width:'20%'
+        width: '20%'
     },
     {
         title: '项目类别',
@@ -155,12 +155,14 @@ export const patientCostCalc: ProColumns[] = [
     {
         title: '人力成本',
         dataIndex: 'empCost',
+        align:'right',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
         },
     },
     {
         title: '设备成本',
+        align:'right',
         dataIndex: 'equipmentCost',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
@@ -168,6 +170,7 @@ export const patientCostCalc: ProColumns[] = [
     },
     {
         title: '空间成本',
+        align:'right',
         dataIndex: 'spaceCost',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
@@ -175,6 +178,7 @@ export const patientCostCalc: ProColumns[] = [
     },
     {
         title: '项目成本',
+        align:'right',
         dataIndex: 'itemCost',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
@@ -182,6 +186,7 @@ export const patientCostCalc: ProColumns[] = [
     },
     {
         title: '药品成本',
+        align:'right',
         dataIndex: 'drugCost',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
@@ -189,6 +194,7 @@ export const patientCostCalc: ProColumns[] = [
     },
     {
         title: '材料成本',
+        align:'right',
         dataIndex: 'materialCost',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
@@ -196,6 +202,7 @@ export const patientCostCalc: ProColumns[] = [
     },
     {
         title: '项目收入',
+        align:'right',
         dataIndex: 'itemIncome',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
@@ -203,6 +210,7 @@ export const patientCostCalc: ProColumns[] = [
     },
     {
         title: '药品收入',
+        align:'right',
         dataIndex: 'drugIncome',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
@@ -210,6 +218,7 @@ export const patientCostCalc: ProColumns[] = [
     },
     {
         title: '材料收入',
+        align:'right',
         dataIndex: 'materialIncome',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
@@ -308,7 +317,7 @@ export const DRG_DIPCostCalc: ProColumns[] = [
     },
     {
         title: '分组名称',
-        width:'18%',
+        width: '18%',
         dataIndex: 'name',
     },
     {
@@ -390,7 +399,7 @@ export const clinicalPathway: ProColumns[] = [
     },
     {
         title: '路径名称',
-        width:'20%',
+        width: '20%',
         dataIndex: 'name',
     },
     {
@@ -474,7 +483,7 @@ export const medicalOrderItem: ProColumns[] = [
     {
         title: '医嘱项目名称',
         dataIndex: 'name',
-        width:'18%'
+        width: '18%'
     },
     {
         title: '科室代码',
@@ -558,7 +567,7 @@ export const medicalMaterialCostCalc: ProColumns[] = [
     {
         title: '责任中心名称',
         dataIndex: 'responsibilityName',
-        width:'10%'
+        width: '10%'
     },
     {
         title: '收费项目编码',
@@ -567,7 +576,7 @@ export const medicalMaterialCostCalc: ProColumns[] = [
     {
         title: '收费项目名称',
         dataIndex: 'name',
-        width:'30%'
+        width: '30%'
     },
 
     {
@@ -576,6 +585,7 @@ export const medicalMaterialCostCalc: ProColumns[] = [
     },
     {
         title: '药品收入',
+        align:'right',
         dataIndex: 'drugIncome',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
@@ -583,6 +593,7 @@ export const medicalMaterialCostCalc: ProColumns[] = [
     },
     {
         title: '材料收入',
+        align:'right',
         dataIndex: 'materialIncome',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
@@ -591,18 +602,20 @@ export const medicalMaterialCostCalc: ProColumns[] = [
     {
         title: '药品成本',
         dataIndex: 'drugCost',
+        align:'right',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
         },
     },
     {
         title: '材料成本',
+        align:'right',
         dataIndex: 'materialCost',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
         },
     },
-    
+
 ];
 export const beforeCollectionSearch: ProColumns[] = [
     {
@@ -616,15 +629,16 @@ export const beforeCollectionSearch: ProColumns[] = [
     {
         title: '金额(元)',
         dataIndex: 'amount',
-        width:130,
+        width: 130,
+        align:'center',
         renderText(num, record, index, action) {
-            return formatMoneyNumber(num);
-        },
+            return <div style={{paddingRight:30,textAlign:'right'}}>{formatMoneyNumber(num)}</div>
+        }
     },
     {
         title: '开单科室',
         dataIndex: 'openDepartmentCodeName',
-        
+
     },
     {
         title: '开单责任中心',
@@ -718,45 +732,46 @@ export const afterCollectionSearch: ProColumns[] = [
 export const beforeCostShareSearch: ProColumns[] = [
     {
         title: '成本项目',
-        width:'20%',
+        width: '20%',
         dataIndex: 'productName',
         renderText(num, record, index, action) {
-            const {productCode,productName} = record;
+            const { productCode, productName } = record;
             return `[${productCode}]${productName}`
         },
     },
     {
         title: '会计科目',
-        width:'20%',
+        width: '20%',
         dataIndex: 'accountName',
         renderText(num, record, index, action) {
-            const {accountCode,accountName} = record;
+            const { accountCode, accountName } = record;
             return `[${accountCode}]${accountName}`
         },
     },
     {
         title: '金额(元)',
-        width:'20%',
+        width: '20%',
+        align:'center',
         dataIndex: 'amount',
         renderText(num, record, index, action) {
-            return formatMoneyNumber(num);
+            return <div style={{textAlign:'right',paddingRight:'30%'}}>{formatMoneyNumber(num)}</div>
         },
     },
     {
         title: '科室名称',
-        width:'20%',
+        width: '20%',
         dataIndex: 'departName',
         renderText(num, record, index, action) {
-            const {departCode,departName} = record;
+            const { departCode, departName } = record;
             return `[${departCode}]${departName}`
         },
     },
     {
         title: '责任中心名',
         dataIndex: 'responsibilityName',
-        width:'20%',
+        width: '20%',
         renderText(num, record, index, action) {
-            const {responsibilityCode,responsibilityName} = record;
+            const { responsibilityCode, responsibilityName } = record;
             return `[${responsibilityCode}]${responsibilityName}`
         },
     },
@@ -765,21 +780,25 @@ export const beforeCostShareSearch: ProColumns[] = [
 export const costShare: ProColumns[] = [
     {
         title: '年份',
+        align:'left',
         dataIndex: 'year',
     },
     {
         title: '月份',
+        align:'center',
         dataIndex: 'month',
     },
     {
         title: '金额',
+        align:'right',
         dataIndex: 'amount',
         renderText(num, record, index, action) {
-            return formatMoneyNumber(num);
+            return <div style={{textAlign:'right'}}>{formatMoneyNumber(num)}</div>
         },
     },
     {
         title: '是否分摊',
+        align:'right',
         dataIndex: 'isAllocation',
         render: bool => bool ? '已分摊' : '未分摊'
     },
@@ -787,17 +806,18 @@ export const costShare: ProColumns[] = [
 ];
 
 export const afterCostShareSearch: ProColumns[] = [
-    {
-        title: '年份',
-        dataIndex: 'dateYear',
-        width: tableColumnsWidObj.year
-    },
-    {
-        title: '月份',
-        dataIndex: 'dateMonth',
-        width: tableColumnsWidObj.month
-    },
-    {
+    // {
+    //     title: '年份',
+    //     dataIndex: 'dateYear',
+    //     width: tableColumnsWidObj.year
+    // },
+    // {
+    //     title: '月份',
+    //     dataIndex: 'dateMonth',
+    //     width: tableColumnsWidObj.month
+    // },
+    {
+        width:90,
         title: '分摊层级',
         dataIndex: 'levelSort',
     },
@@ -821,11 +841,13 @@ export const afterCostShareSearch: ProColumns[] = [
     },
     {
         title: '会计科目名',
+        width:220,
         dataIndex: 'accountingName',
     },
     {
         title: '金额',
         dataIndex: 'amount',
+        align:'right',
         renderText(num, record, index, action) {
             return formatMoneyNumber(num);
         },
@@ -883,39 +905,46 @@ export const departmentCostCalculate: ProColumns[] = [
 ];
 export const wholeHospCostCalculate: ProColumns[] = [
     {
-        title: '报表项目',
+        title: '报表项目',
         dataIndex: 'reportName',
         renderText(text, record, index, action) {
-            const {description} = record;
-            return description?<Popover content={description}><span style={{cursor:'pointer'}}>{text}</span><IconFont className="hover-icon" style={{fontSize:16,color:'#17181a',paddingLeft:4,position:'relative',top:1}} type={'iconshuoming'} /></Popover>:text
+            const { description } = record;
+            return description ? <Popover content={()=><div dangerouslySetInnerHTML={{__html:description}} />}><span style={{ cursor: 'pointer' }}>{text}</span><IconFont className="hover-icon" style={{ fontSize: 16, color: '#17181a', paddingLeft: 4, position: 'relative', top: 1 }} type={'iconshuoming'} /></Popover> : text
         },
     },
     {
         title: '金额',
+        width:200,
+        align:'right',
         dataIndex: 'amount',
         renderText(num, record, index, action) {
-            const {children} = record;
-            return (children&&children.length>0)?<React.Fragment></React.Fragment>:formatMoneyNumber(num);
+            const { children,calcType } = record;
+            // 有 children 时返回 null,否则格式化金额
+            return (children && children.length > 0 && calcType == '0' )? <React.Fragment></React.Fragment> : formatMoneyNumber(num);
+            
         },
     },
     {
         title: '占比',
+        width:100,
+        align:'right',
         dataIndex: 'percent',
-        renderText(num,record) {
-            const {children} = record;
-            return (children&&children.length>0)?<React.Fragment></React.Fragment>:formatToPercentage(num?num:0);
-        },
-
-    },
-    {
-        title: '说明',
-        dataIndex: 'description',
-        renderText(text,record) {
-            const {children} = record;
-            return (children&&children.length>0)?<React.Fragment></React.Fragment>:text;
+        renderText(num, record) {
+            const { children,calcType } = record;
+            // 有 children 时返回 null,否则格式化百分比
+            return (children && children.length > 0 && calcType == '0') ? <React.Fragment></React.Fragment> : formatToPercentage(num);
         },
     },
 
+    // {
+    //     title: '说明',
+    //     dataIndex: 'description',
+    //     renderText(text,record) {
+    //         const {children} = record;
+    //         return (children&&children.length>0)?<React.Fragment></React.Fragment>:text;
+    //     },
+    // },
+
 ];
 
 export const costShareReportTable: ProColumns[] = [

+ 217 - 39
src/pages/costAccounting/calcPageTemplate/index.tsx

@@ -2,17 +2,17 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-09-06 15:56:24
+ * @LastEditTime: 2024-12-05 15:06:14
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
 
 import { createFromIconfontCN } from '@ant-design/icons';
 
-import { DatePicker, Input, Modal, message, Table, Button, Tabs } from 'antd';
+import { DatePicker, Input, Modal, message, Table, Button, Popconfirm, Tabs } from 'antd';
 import { useEffect, useRef, useState } from 'react';
 
-import { calculateReq, cancelAllocation, cancelIncomeCollection, downloadTemplateReq, generateReportHandle, getAfterCostShareSearchTableData, getAfterIncomeCollectionTableData, getCalcPageTableData, startAllocation, startIncomeCollection } from './service';
+import { calculateReq, cancelAllocation, cancelIncomeCollection, downloadTemplateReq, generateReportHandle, getAfterCostShareSearchTableData, getAfterIncomeCollectionTableData, getCalcPageTableData, getUserHasReports, startAllocation, startIncomeCollection } from './service';
 
 import './style.less';
 import moment from 'moment';
@@ -22,7 +22,7 @@ import KCIMPagecontainer from '@/components/KCIMPageContainer';
 import { KCIMTable } from '@/components/KCIMTable';
 
 import { ActionType, ProColumns, ProFormCascader, ProFormSelect } from '@ant-design/pro-components';
-import { formatMoneyNumber } from '@/utils/format';
+import { formatMoneyNumber, formatToPercentage } from '@/utils/format';
 
 
 import { afterCollectionSearch, afterCostShareSearch, beforeCollectionSearch, beforeCostShareSearch, chargeItemCostCalc, clinicalPathway, costShare, costShareReportTable, departmentCostCalculate, departmentOperatingReport, diseaseCostCalculation, DRG_DIPCostCalc, incomeCollection, medicalMaterialCostCalc, medicalOrderItem, patientCostCalc, projectShareParamsCalc, unitPersonnelCostCalc, wholeHospCostCalculate, wholeHospOperatingReport } from './columns';
@@ -35,6 +35,7 @@ import exportTableToExcel from '@/utils/tableToExcel';
 
 import { useAccess, useParams } from '@umijs/max'
 import { useModel } from '@umijs/max';
+import { getParamsDataBySysId } from '@/services/getDic';
 
 
 const IconFont = createFromIconfontCN({
@@ -47,23 +48,46 @@ let currentPage = 0;
 let totalTableData: any[] = [];
 
 
-function transformChildToChildren(data:any[]) {
+function transformChildToChildren(data: any[]) {
   return data.map(item => {
-      let newItem = { ...item };
+    let newItem = { ...item };
 
-      // 如果有子项,将 'child' 属性改为 'children'
-      if (newItem.child) {
-          newItem.children = transformChildToChildren(newItem.child);
-          delete newItem.child; // 删除原始的 'child' 属性
-      }
+    // 如果有子项,将 'child' 属性改为 'children'
+    if (newItem.child) {
+      newItem.children = transformChildToChildren(newItem.child);
+      delete newItem.child; // 删除原始的 'child' 属性
+    }
 
-      return newItem;
+    return newItem;
   });
 }
 
+
+const getNextUnexpandedKeys = (data: any[], expandedKeys: any[] = []) => {
+  let keys: any[] = [];
+
+  const traverse = (nodes: any) => {
+    for (const node of nodes) {
+      // 如果当前节点还没有展开,就把它加入 keys
+      if (!expandedKeys.includes(node.id)) {
+        keys.push(node.id);
+      }
+
+      // 如果当前节点已经展开,继续遍历子节点
+      if (node.children && expandedKeys.includes(node.id)) {
+        traverse(node.children);
+      }
+    }
+  };
+
+  traverse(data);
+
+  return keys;
+};
+
 export default function calcPageTemplate() {
-  const { initialState,setInitialState } = useModel('@@initialState');
-  const [computeDate, set_computeDate] = useState<string>(initialState?initialState.computeDate:'');
+  const { initialState, setInitialState } = useModel('@@initialState');
+  const [computeDate, set_computeDate] = useState<string>(initialState ? initialState.computeDate : '');
   const [tableDataFilterParams, set_tableDataFilterParams] = useState<any>({ computeDate });
   const [tableDataSearchKeywords, set_tableDataSearchKeywords] = useState('');
   const tableRef = useRef<ActionType>();
@@ -76,14 +100,25 @@ export default function calcPageTemplate() {
   const [totalCount, set_totalCount] = useState<undefined | number>(undefined);
   const [inputValues, setInputValues] = useState<{ [key: string]: any }>({});
   const [btnAccessStr, set_btnAccessStr] = useState<undefined | string>(undefined);
+  const [tabs, set_tabs] = useState<any[]>([]);
+  const [currentTabKey, set_currentTabKey] = useState<string | undefined>(undefined);
 
   const access = useAccess();
 
   const [isModalVisible, setIsModalVisible] = useState(false);
   const [openProcessModal, set_openProcessModal] = useState(false);
+  const [allParentsKeys, set_allParentsKeys] = useState<any[]>([]);
+  const [dataSource, set_dataSource] = useState<any[]>([]);
+
 
 
   const getTableData = async (params: any) => {
+    const { reportType } = params;
+    if (params.calcPageKey == 'wholeHospCostCalculate' && !reportType) {
+      return {
+        success: false
+      }
+    }
 
     const resp = await getCalcPageTableData({ ...params, ...tableDataFilterParams });
     if (resp) {
@@ -99,6 +134,7 @@ export default function calcPageTemplate() {
               ellipsis: true,
               fixed: item.freeze ? true : false,
               hideInTable: item.hide,
+              align: item.dataType == 3 ? 'right' : 'left',
               sorter: item.sortStatus ? (a: any, b: any) => {
                 if (item.dataType == 3) {
                   //数值
@@ -140,7 +176,8 @@ export default function calcPageTemplate() {
           data = data ? data.map((a: any) => ({ ...a, children: a.childList })) : []
         }
         if (params.calcPageKey == 'wholeHospCostCalculate') {
-          data = data ? transformChildToChildren(data) : []
+          data = data ? transformChildToChildren(data) : [];
+          set_dataSource(data);
         }
         if (params.calcPageKey == 'beforeCollectionSearch' || params.calcPageKey == 'beforeCostShareSearch' || params.calcPageKey == 'afterCostShareSearch' || params.calcPageKey == 'afterCollectionSearch') {
           const { totalAmount = 0 } = resp;
@@ -183,7 +220,7 @@ export default function calcPageTemplate() {
       cancelText: '取消',
       onOk: async (...args) => {
 
-        if (params.calcPageKey != 'chargeItemCostCalc') {
+        if (params.calcPageKey != 'chargeItemCostCalc' && params.calcPageKey != 'wholeHospCostCalculate') {
           set_loading(true);
           const resp = await calculateReq(computeDate, params.calcPageKey);
           if (resp) {
@@ -200,6 +237,17 @@ export default function calcPageTemplate() {
           a();
           return false;
         }
+        if (params.calcPageKey == 'wholeHospCostCalculate') {
+          const resp = await calculateReq(computeDate,params.calcPageKey, currentTabKey);
+          if (resp) {
+            set_loading(false);
+            message.success('操作成功!');
+            tableRef.current?.reload();
+          } else {
+            set_loading(false);
+          }
+          return false;
+        }
 
       },
     })
@@ -224,7 +272,7 @@ export default function calcPageTemplate() {
         return (
           <div className='filterItem' style={{ marginLeft: 16, width: 205 }}>
             <span className='label' style={{ whiteSpace: 'nowrap' }}>{label}</span>
-            <Input placeholder={`${placeholder}`} allowClear
+            <Input placeholder={`${placeholder}`} allowClear autoComplete='off'
               suffix={
                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle(`${key}`)} />
               }
@@ -268,10 +316,12 @@ export default function calcPageTemplate() {
                 if (arr) return arr
                 return [];
               }}
+
               fieldProps={{
                 onChange(value, option) {
                   set_tableDataFilterParams({ ...tableDataFilterParams, [`${key}`]: value })
                 },
+
               }}
             />
           </div>
@@ -486,31 +536,70 @@ export default function calcPageTemplate() {
   const handleExportCompletion = () => {
     currentPage = 0;
     set_openProcessModal(false);
-    exportHandle();
+    exportHandle(params.calcPageKey == 'wholeHospCostCalculate' ? 'reportName' : undefined);
   }
 
-  const exportHandle = () => {
 
+
+  const exportHandle = (indentColumn?: string) => {  // 将 indentColumn 设置为可选参数
     let headers: { [key: string]: any } = {};
     let data: any[] = [];
 
+    // 生成表头
     columns.forEach(a => {
       headers[`${a.dataIndex}`] = a.title;
     });
 
-    totalTableData.forEach(b => {
-      let _temp: { [key: string]: any } = {};
-      Object.keys(headers).forEach(key => {
-        _temp[`${key}`] = b[`${key}`]
+    // 递归处理数据,支持嵌套的 children,并为指定列添加缩进
+    const processData = (items: any[], level: number = 0) => {
+      items.forEach(item => {
+        let _temp: { [key: string]: any } = {};
+
+        Object.keys(headers).forEach(key => {
+          if (indentColumn && key === indentColumn) {  // 检查是否需要缩进
+            // 使用 Unicode 不可见空格来缩进
+            _temp[`${key}`] = `${'\u00A0'.repeat(level * 4)}${item[`${key}`]}`; // 使用4个不可见空格字符缩进
+          } else if (item.children && item.children.length > 0 && (params.calcPageKey != 'wholeHospCostCalculate')) {
+            // 如果有 children,返回空字符串来保持 Excel 也为空
+            _temp[`${key}`] = '';
+          } else {
+            if (params.calcPageKey == 'wholeHospCostCalculate') {
+              if (key == 'amount') {
+                _temp[`${key}`] = (item[`${key}`] != undefined || item[`${key}`] != null) ? formatMoneyNumber(item[`${key}`]) : item[`${key}`];
+              }
+              if (key == 'percent') {
+                _temp[`${key}`] = (item[`${key}`] != undefined || item[`${key}`] != null) ? formatToPercentage(item[`${key}`]) : item[`${key}`];
+              }
+            } else {
+              _temp[`${key}`] = item[`${key}`];
+            }
+
+          }
+        });
+
+        data.push(_temp);
+
+        // 递归处理子项,增加缩进层级
+        if (item.children && item.children.length > 0) {
+          processData(item.children, level + 1);
+        }
       });
-      data.push(_temp);
-    });
+    };
 
-    exportTableToExcel(data, columns as any[], '项目成本计算');
+    // 开始处理数据
+    processData(totalTableData);
+
+    // 导出数据到 Excel
+    exportTableToExcel(data, columns as any[], params.calcPageKey == 'wholeHospCostCalculate' ? '全院损益报表' : '项目成本计算');
+
+    // 清空当前页和总数据
     currentPage = 0;
     totalTableData = [];
     // tableRef.current?.reload();
-  }
+  };
+
+
+
 
   const fetchExportData = async () => {
 
@@ -531,6 +620,36 @@ export default function calcPageTemplate() {
     }
   };
 
+  const handleExpandNext = () => {
+    // 当前所有未展开的节点,第一层优先展开
+    const keysToExpand = getNextUnexpandedKeys(dataSource, allParentsKeys);
+    set_allParentsKeys((prev) => Array.from(new Set([...prev, ...keysToExpand])));
+  };
+
+  const handleCollapseAll = () => {
+    set_allParentsKeys([]);
+  };
+
+
+  const getIfshowPercent = async () => {
+    const { systemId } = JSON.parse(localStorage.getItem('currentSelectedTab') as string)
+    const resp = await getParamsDataBySysId(systemId, '1851077044079824896');
+    if (resp) {
+      return resp.value == '1' ? true : false
+    }
+  }
+
+  const getTabs = async () => {
+    const resp = await getUserHasReports();
+    if (resp) {
+      const { dataVoList } = resp;
+      const filterArr = dataVoList.filter((a: any) => a.value == '2')
+      set_tabs(filterArr.map((a: any) => ({ label: a.name, value: a.code, key: a.code })));
+      filterArr.length > 0 && set_currentTabKey(filterArr[0].code);
+    }
+  }
+
+
 
   useEffect(() => {
     setInputValues({});
@@ -639,13 +758,23 @@ export default function calcPageTemplate() {
     if (calcPageKey == "costShare") {
       set_columns([...costShare, {
         title: '操作',
+        align: 'right',
         dataIndex: 'option',
         width: '15%',
         render: (_, record) => {
           const { isAllocation: isCollection } = record;
-          return [
-            <a style={{ fontSize: 14 }} onClick={() => optionBtnGroupshandle(isCollection, record)}>{isCollection ? '撤销分摊' : '开始分摊'}</a>
-          ]
+          return !isCollection ?
+            <a style={{ fontSize: 14 }} onClick={() => optionBtnGroupshandle(isCollection, record)}>{isCollection ? '撤销' : '分摊'}</a>
+            : [
+              <Popconfirm
+                title={`是否确认撤销?`}
+                key="del"
+                onConfirm={() => optionBtnGroupshandle(isCollection, record)}
+              >
+                <a style={{ fontSize: 14 }}>{isCollection ? '撤销' : '分摊'}</a>
+              </Popconfirm>
+
+            ]
         },
       }]);
       set_filterConf([]);
@@ -656,7 +785,7 @@ export default function calcPageTemplate() {
       set_columns([...afterCostShareSearch]);
       set_filterConf(afterCostShareSearchFilterConf);
       set_ifShowCalcBtn(false);
-      set_scrollX(1200);
+      set_scrollX(1000);
     }
 
     if (calcPageKey == "medicalMaterialCostCalc") {
@@ -672,9 +801,14 @@ export default function calcPageTemplate() {
       set_ifShowCalcBtn(true);
     }
     if (calcPageKey == "wholeHospCostCalculate") {
-      set_columns([...wholeHospCostCalculate]);
+      getIfshowPercent().then((resp) => {
+        set_columns(resp ? [...wholeHospCostCalculate] : [...(wholeHospCostCalculate.filter(a => a.title != '占比'))]);
+      })
       set_filterConf([]);
       set_ifShowCalcBtn(true);
+      const tabs = access.whatCanIDoInThisPage(location.pathname.replace('/CostAccountingSys', ''));
+      const a = tabs.reduce((prev: any, cur: any) => `${prev},${cur.code}`, '');
+      set_btnAccessStr(a);
     }
     if (calcPageKey == "costShareReportTable") {
       set_columns([...costShareReportTable, {
@@ -743,14 +877,26 @@ export default function calcPageTemplate() {
       set_scrollX(1200);
     }
 
+    if (currentTabKey && params.calcPageKey == 'wholeHospCostCalculate') {
+      set_tableDataFilterParams({ ...tableDataFilterParams, reportType: currentTabKey })
+    } else {
+      set_tableDataFilterParams({ ...tableDataFilterParams, computeDate, calcPageKey, reportType: tableDataFilterParams.reportType });
+    }
+
+  }, [params, currentTabKey]);
+
+  useEffect(() => {
+    if (params.calcPageKey == 'wholeHospCostCalculate') {
+      getTabs();
+    }
+  }, [params])
+
 
-    set_tableDataFilterParams({...tableDataFilterParams, computeDate, calcPageKey,reportType:calcPageKey == 'wholeHospCostCalculate'?3:tableDataFilterParams.reportType });
-  }, [params]);
 
 
 
   return (
-    <KCIMPagecontainer className="calcPageTemplate" title={false}>
+    <KCIMPagecontainer className="calcPageTemplate" title={false} style={params.calcPageKey == 'wholeHospCostCalculate' ? { paddingTop: 0 } : {}}>
       <ProgressModal
         title='计算进度'
         type={calTypeStr}
@@ -763,6 +909,17 @@ export default function calcPageTemplate() {
         fetchData={fetchExportData}
         onCompletion={handleExportCompletion}
       />
+      {
+        params.calcPageKey == 'wholeHospCostCalculate' && (
+          <Tabs
+            defaultActiveKey={currentTabKey}
+            items={tabs}
+            key={'key'}
+            onChange={(key) => set_currentTabKey(key)}
+          />
+        )
+      }
+
       <div className="toolBar">
         <div className="filter">
           <div className="filterItem">
@@ -772,7 +929,7 @@ export default function calcPageTemplate() {
                 <DatePicker
                   onChange={(data, dateString) => {
                     set_computeDate(dateString);
-                    setInitialState((s:any)=>({...s,computeDate: dateString}));
+                    setInitialState((s: any) => ({ ...s, computeDate: dateString }));
                     set_tableDataFilterParams({
                       ...tableDataFilterParams,
                       computeDate: dateString,
@@ -782,6 +939,7 @@ export default function calcPageTemplate() {
                   locale={locale}
                   defaultValue={moment(computeDate, 'YYYY-MM')}
                   format="YYYY-MM"
+                  autoComplete='off'
                   placeholder="选择年月"
                 />
               </div>
@@ -790,22 +948,42 @@ export default function calcPageTemplate() {
           {generateFilterItems(filterConf)}
         </div>
         <div className="btnGroup">
-          {(params.calcPageKey == 'projectCostCalc' && btnAccessStr?.indexOf('export') != -1) && <a className='export' onClick={() => set_openProcessModal(true)}>导出</a>}
+          {params.calcPageKey == 'wholeHospCostCalculate' && (
+            <>
+              <span className='btn' onClick={() => handleCollapseAll()}>全部折叠</span>
+              <span className='btn' style={{ marginRight: 16 }} onClick={() => handleExpandNext()}>展开下一层</span>
+            </>
+          )}
+          {((params.calcPageKey == 'projectCostCalc' || params.calcPageKey == 'wholeHospCostCalculate') && btnAccessStr ? (btnAccessStr.indexOf('export') != -1) : false) && <a className='export' onClick={() => set_openProcessModal(true)}>导出</a>}
           {ifShowCalcBtn && <a className='calc' onClick={() => calcFunc()}>计算</a>}
           {(params.calcPageKey == 'afterCostShareSearch' || params.calcPageKey == 'afterCollectionSearch') && (<Button loading={loading} size='small' className='reportDataBtn' onClick={() => openDataTable()}>报表数据</Button>)}
           {(params.calcPageKey == 'departmentOperatingReport' || params.calcPageKey == 'wholeHospOperatingReport') && (<span className='reportDataBtn' onClick={() => generateReport()}>生成报表</span>)}
         </div>
       </div>
+
       <div style={{ marginTop: 16 }}>
 
         <KCIMTable
           columns={columns}
           actionRef={tableRef}
           rowKey="id"
-          rowClassName={params.calcPageKey == 'wholeHospCostCalculate'?((record) => (record.children ? 'has-children hover-row' : 'hover-row')):''}
-          scroll={{ x: scrollX, y:params.calcPageKey == 'afterCostShareSearch'?`calc(100vh - 270px)`: `calc(100vh - 233px)` }}
+          expandable={params.calcPageKey == 'wholeHospCostCalculate' ? {
+            defaultExpandAllRows: true, expandedRowKeys: allParentsKeys,
+            onExpand(expanded, record) {
+              const { id } = record;
+              if (!expanded) {
+                const expandedKeys = allParentsKeys.filter(a => a != id);
+                set_allParentsKeys([...expandedKeys]);
+              } else {
+                set_allParentsKeys([...allParentsKeys, id]);
+              }
+            },
+          } : undefined}
+          rowClassName={params.calcPageKey == 'wholeHospCostCalculate' ? ((record) => (record.children ? 'has-children hover-row' : 'hover-row')) : ''}
+          scroll={{ x: scrollX, y: params.calcPageKey == 'afterCostShareSearch' ? `calc(100vh - 270px)` : `calc(100vh - 233px)` }}
           params={tableDataFilterParams}
           request={(params) => getTableData(params)}
+          pagination={params.calcPageKey == 'wholeHospCostCalculate' ? false : undefined}
         />
         {
           totalCount != undefined && <a style={{ marginTop: 16, display: 'inline-block' }}>{`合计:${formatMoneyNumber(totalCount)}`}</a>

+ 10 - 2
src/pages/costAccounting/calcPageTemplate/service.ts

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 16:31:27
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-09-05 15:53:30
+ * @LastEditTime: 2024-12-05 14:58:45
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/service.ts
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -229,7 +229,7 @@ export const calculateReq = (computeDate: string,calcPageKey: string | undefined
   if(calcPageKey == 'wholeHospCostCalculate'){
     return request('/costAccount/hospProfitAndLoss/calc', {
       method: 'POST',
-      params:{date:`${computeDate}-01`}
+      params:{date:`${computeDate}-01`,reportType:type}
     });
   }
   if(calcPageKey == 'medicalMaterialCostCalc'){
@@ -352,6 +352,14 @@ export const generateReportHandle = (params:any,path:string) => {
   });
 }
 
+//查询用户有权限的损益报表
+export const getUserHasReports = () => {
+  return request('/costAccount/userReportRight/getUserReports', {
+    method: 'GET',
+    // params:{...params},
+  });
+}
+
 
 //下载excel
 export const downloadTemplateReq = (pathStr: string,data:any) => {

+ 15 - 0
src/pages/costAccounting/calcPageTemplate/style.less

@@ -27,6 +27,21 @@
 
     .btnGroup {
 
+      &>span {
+        cursor: pointer;
+        display: inline-block;
+        color: #17181A;
+        line-height: 24px;
+        padding: 0 14px;
+        border-radius: 4px;
+        border: 1px solid #DAE2F2;
+        background: #FAFCFF;
+        margin-right: 8px;
+        font-weight: 400;
+        font-size: 14px;
+        color: #17181A;
+      }
+
       .calc,
       .reportDataBtn,
       .export {

+ 4 - 2
src/pages/costLibraryManagement/basicCostManagement/drugCostManagement/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:28:49
+ * @LastEditTime: 2024-10-15 15:29:44
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -67,6 +67,7 @@ export default function DrugCostManagement() {
             title: '单价',
             dataIndex: 'price',
             width:90,
+            align:'right',
             renderText(num) {
                 return formatMoneyNumber(num)
             },
@@ -75,6 +76,7 @@ export default function DrugCostManagement() {
             title: '成本',
             dataIndex: 'cost',
             width:90,
+            align:'right',
             renderText(num) {
                 return formatMoneyNumber(num)
             },
@@ -325,7 +327,7 @@ export default function DrugCostManagement() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 项目名称:</span>
-                        <Input placeholder={'请输入'} allowClear
+                        <Input placeholder={'请输入'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo"  style={{color:'#99A6BF'}} onClick={() => tableDataSearchHandle('name')} />
                             }

+ 5 - 2
src/pages/costLibraryManagement/basicCostManagement/equipmentCostManagement/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:28:57
+ * @LastEditTime: 2024-10-15 15:31:31
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -68,12 +68,14 @@ export default function EquipmentCostManagement() {
         {
             title: '采购价格(元)',
             dataIndex: 'price',
+            align:'right',
             renderText(num) {
                 return formatMoneyNumber(num)
             },
         },
         {
             title: '每年折旧',
+            align:'right',
             dataIndex: 'costPerYear',
             renderText(num) {
                 return formatMoneyNumber(num)
@@ -81,6 +83,7 @@ export default function EquipmentCostManagement() {
         },
         {
             title: '每分钟成本',
+            align:'right',
             dataIndex: 'costPerMinute',
         },
         {
@@ -321,7 +324,7 @@ export default function EquipmentCostManagement() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 设备名称:</span>
-                        <Input placeholder={'请输入'} allowClear
+                        <Input placeholder={'请输入'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{color:'#99A6BF'}} onClick={() => tableDataSearchHandle('name')} />
                             }

+ 4 - 2
src/pages/costLibraryManagement/basicCostManagement/materialCostManagement/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:28:41
+ * @LastEditTime: 2024-10-15 15:30:25
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -69,6 +69,7 @@ export default function MaterialCostManagement() {
             title: '单价',
             dataIndex: 'price',
             width:90,
+            align:'right',
             renderText(num) {
                 return formatMoneyNumber(num)
             },
@@ -76,6 +77,7 @@ export default function MaterialCostManagement() {
         {
             title: '成本',
             width:90,
+            align:'right',
             dataIndex: 'cost',
             renderText(num) {
                 return formatMoneyNumber(num)
@@ -359,7 +361,7 @@ export default function MaterialCostManagement() {
                     </div>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 项目名称:</span>
-                        <Input placeholder={'请输入'} allowClear
+                        <Input placeholder={'请输入'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{color:'#99A6BF'}} onClick={() => tableDataSearchHandle('name')} />
                             }

+ 2 - 2
src/pages/costLibraryManagement/basicCostManagement/personnelClassificationMana/index.tsx

@@ -483,7 +483,7 @@ const PersonnelClassificationMana = () => {
             )}
             <div className='left'>
                 <div className='toolbar'>
-                    <Input placeholder={'人事分类'} allowClear
+                    <Input placeholder={'人事分类'} allowClear autoComplete='off'
                         suffix={
                             <IconFont type="iconsousuo" />
                         }
@@ -538,7 +538,7 @@ const PersonnelClassificationMana = () => {
                     <div className='filter'>
                         <div className='filterItem' style={{ marginLeft: 16, width: 205 }}>
                             <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                            <Input placeholder={'输入工号,姓名'} allowClear
+                            <Input placeholder={'输入工号,姓名'} allowClear autoComplete='off'
                                 suffix={
                                     <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                                 }

+ 6 - 2
src/pages/costLibraryManagement/basicCostManagement/spaceCostManagement/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:29:30
+ * @LastEditTime: 2024-10-15 15:32:31
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -59,10 +59,12 @@ export default function SpaceCostManagement() {
         {
             title: '建置成本(元)',
             dataIndex: 'cost',
+            align:'right',
         },
         {
             title: '建置容积(㎡)',
             dataIndex: 'volume',
+            align:'right',
         },
         {
             title: '折旧年限',
@@ -73,6 +75,7 @@ export default function SpaceCostManagement() {
         },
         {
             title: '每年折旧',
+            align:'right',
             dataIndex: 'costPerYear',
             renderText(num) {
                 return formatMoneyNumber(num)
@@ -80,6 +83,7 @@ export default function SpaceCostManagement() {
         },
         {
             title: '每分钟成本',
+            align:'right',
             dataIndex: 'costPerMinute',
         },
         {
@@ -347,7 +351,7 @@ export default function SpaceCostManagement() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 空间名称:</span>
-                        <Input placeholder={'请输入'} allowClear
+                        <Input placeholder={'请输入'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo"  style={{color:'#99A6BF'}} onClick={() => tableDataSearchHandle('name')} />
                             }

+ 2 - 2
src/pages/costLibraryManagement/diseaseCostManagement/diseaseDiagnosisComparison/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:38:58
+ * @LastEditTime: 2024-09-09 10:47:11
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -296,7 +296,7 @@ export default function DiseaseDiagnosisComparison() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'诊断名称/国家编码'} allowClear
+                        <Input placeholder={'诊断名称/国家编码'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo"  style={{color:'#99A6BF'}} onClick={() => tableDataSearchHandle('name')} />
                             }

+ 2 - 2
src/pages/costLibraryManagement/diseaseCostManagement/diseaseMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:39:53
+ * @LastEditTime: 2024-09-09 10:47:03
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -246,7 +246,7 @@ export default function DiseaseMana() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'病种名称/病种编码'} allowClear
+                        <Input placeholder={'病种名称/病种编码'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{color:'#99A6BF'}} onClick={() => tableDataSearchHandle('name')} />
                             }

+ 3 - 3
src/pages/costLibraryManagement/medicalOrderProject/medicalOrderProjectMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:41:16
+ * @LastEditTime: 2024-09-09 10:46:47
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -479,7 +479,7 @@ const MedicalOrderProjectMana = () => {
                     />
                 </div>
                 <div className='toolbar'>
-                    <Input placeholder={'报表名称'} allowClear
+                    <Input placeholder={'报表名称'} allowClear autoComplete='off'
                         suffix={
                             <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} />
                         }
@@ -534,7 +534,7 @@ const MedicalOrderProjectMana = () => {
                     <div className='filter'>
                         <div className='filterItem'>
                             <span className='label' style={{ whiteSpace: 'nowrap' }}> 项目名称:</span>
-                            <Input placeholder={'请输入'} allowClear
+                            <Input placeholder={'请输入'} allowClear autoComplete='off'
                                 suffix={
                                     <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('itemName')} />
                                 }

+ 4 - 3
src/pages/costLibraryManagement/projectCostManagement/chargeItemsMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:34:01
+ * @LastEditTime: 2024-10-15 15:35:24
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -180,7 +180,8 @@ export default function ChargeItemsMana() {
         {
             title: '单价',
             dataIndex: 'price',
-            width: 90
+            width: 90,
+            align:'right'
         },
         {
             title: '操作',
@@ -520,7 +521,7 @@ export default function ChargeItemsMana() {
                                 <div className='filter'>
                                     <div className='filterItem'>
                                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                                        <Input placeholder={'项目名称/国家编码'} allowClear
+                                        <Input placeholder={'项目名称/国家编码'} allowClear autoComplete='off'
                                             suffix={
                                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('name')} />
                                             }

+ 0 - 1
src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/editTableModal.tsx

@@ -1,5 +1,4 @@
 import React, { Key, useEffect, useState } from "react";
-import { Input, Select } from 'antd'
 import { KCIMTable } from "@/components/KCIMTable";
 import { createFromIconfontCN } from "@ant-design/icons";
 

+ 2 - 2
src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:37:50
+ * @LastEditTime: 2024-09-09 10:43:39
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -391,7 +391,7 @@ export default function AllocationParamsMap() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'成本列代码/名称'} allowClear
+                        <Input placeholder={'成本列代码/名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 0 - 1
src/pages/costLibraryManagement/projectCostManagement/projectCostShareSet/tableSelector.tsx

@@ -1,5 +1,4 @@
 import React, { Key, useEffect, useState } from "react";
-import { Input, Select } from 'antd'
 import { KCIMTable } from "@/components/KCIMTable";
 import { createFromIconfontCN } from "@ant-design/icons";
 

+ 2 - 2
src/pages/costLibraryManagement/projectCostManagement/projectShareParamsSet/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:35:12
+ * @LastEditTime: 2024-09-09 10:42:35
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -271,7 +271,7 @@ export default function ProjectShareParamsSet() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'分摊参数代码/名称'} allowClear
+                        <Input placeholder={'分摊参数代码/名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 4 - 1
src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-11-15 15:34:36
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-11-17 13:44:23
+ * @LastEditTime: 2024-10-15 15:33:47
  * @FilePath: /CostAccountingSys/src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/drawer.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -26,6 +26,7 @@ const columns_emp: ProColumns[] = [
     },
     {
         title: '数量',
+        align:'right',
         dataIndex: 'num',
     },
     {
@@ -45,6 +46,7 @@ const columns_equip: ProColumns[] = [
     },
     {
         title: '数量',
+        align:'right',
         dataIndex: 'num',
     },
     {
@@ -63,6 +65,7 @@ const columns_space: ProColumns[] = [
     },
     {
         title: '数量',
+        align:'right',
         dataIndex: 'num',
     },
     {

+ 2 - 2
src/pages/costLibraryManagement/projectCostManagement/standardProjectMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:31:19
+ * @LastEditTime: 2024-09-09 10:42:19
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -389,7 +389,7 @@ export default function StandardProjectMana() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'项目名称/国家编码'} allowClear
+                        <Input placeholder={'项目名称/国家编码'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" onClick={() => tableDataSearchHandle('name')} />
                             }

+ 2 - 2
src/pages/costLibraryManagement/reportMana/reportColumnMana/UpDateActBtn.tsx

@@ -155,7 +155,7 @@ const UpDateActBtn: React.FC<UpDataActBtnProps> = ({ record, type, tableRef, onU
             if (request) {
                 await setFormInit(record);
             } else {
-                set_initialValues(type === 'EDIT' ? { ...record, permil: record.permil === '1' ? true : false } : { decimalPlace: 2, dataSource: 2, permil: false });
+                set_initialValues(type === 'EDIT' ? { ...record, permil: record.permil == '1' ? true : false } : { decimalPlace: 2, dataSource: 2, permil: false });
             }
         }
 
@@ -318,7 +318,7 @@ const UpDateActBtn: React.FC<UpDataActBtnProps> = ({ record, type, tableRef, onU
                                                                             />
                                                                         </div>
                                                                         <div className='filterItem' style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', marginLeft: 8 }} >
-                                                                            <Input placeholder={'列标题'} allowClear width={160}
+                                                                            <Input placeholder={'列标题'} allowClear width={160} autoComplete='off'
                                                                                 suffix={
                                                                                     <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle_form('columnName')} />
                                                                                 }

+ 3 - 2
src/pages/costLibraryManagement/reportMana/reportColumnMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:41:51
+ * @LastEditTime: 2024-09-09 10:42:09
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -249,7 +249,7 @@ const reportColumnMana = () => {
                     </div>
                     <div className='filterItem' style={{ marginLeft: 16 }}>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 列标题:</span>
-                        <Input placeholder={'请输入'} allowClear width={160}
+                        <Input placeholder={'请输入'} allowClear width={160} autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('columnName')} />
                             }
@@ -268,6 +268,7 @@ const reportColumnMana = () => {
                                     ...tableDataFilterParams,
                                     columnName: (e.target as HTMLInputElement).value
                                 });
+                                
                             }}
 
                         />

+ 181 - 76
src/pages/costLibraryManagement/reportMana/reportListMana/index.tsx

@@ -2,20 +2,20 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-01-11 19:51:27
+ * @LastEditTime: 2024-11-14 14:55:02
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
 
 
 import { createFromIconfontCN } from '@ant-design/icons';
-import { ActionType, arrayMoveImmutable, useRefFunction } from '@ant-design/pro-components';
-import { ModalForm, ProFormSelect, ProFormText } from '@ant-design/pro-form';
+import { ActionType, arrayMoveImmutable, ProFormRadio, useRefFunction } from '@ant-design/pro-components';
+import { ModalForm, ProFormDependency, ProFormInstance, ProFormSelect, ProFormText } from '@ant-design/pro-form';
 import { ProColumns } from '@ant-design/pro-table';
-import { Dropdown, Input, MenuProps, message, Switch, Tooltip, Popconfirm } from 'antd';
+import { Dropdown, Input, MenuProps, message, Switch, Tooltip, Popconfirm, Form } from 'antd';
 import { ColumnsType } from 'antd/es/table/interface';
 import { TransferItem, TransferProps } from 'antd/es/transfer';
-import { Key } from 'react';
+import { Key, ReactNode } from 'react';
 import { useEffect, useRef, useState } from 'react';
 
 
@@ -52,7 +52,7 @@ const reportListMana = () => {
     const [currentSelectedType, set_currentSelectedType] = useState<any | undefined>(undefined);
 
 
-    const [tableSelecterVisible,set_tableSelecterVisible] = useState(false);
+    const [tableSelecterVisible, set_tableSelecterVisible] = useState(false);
     const [dataSource, setDataSource] = useState<any[]>([]);
     const SortableItem = SortableElement((props: any) => <tr {...props} />);
     const SortContainer = SortableContainer((props: any) => <tbody {...props} />);
@@ -85,7 +85,7 @@ const reportListMana = () => {
             dataIndex: 'primaryKey',
             renderText: (_: any, record: any) => {
 
-                return <Switch disabled={!ifEditTable} size='small' checked={_?true:false} onChange={(bool) => switchChangeHandle(bool, record, 'primaryKey')} />
+                return <Switch disabled={!ifEditTable} size='small' checked={_ ? true : false} onChange={(bool) => switchChangeHandle(bool, record, 'primaryKey')} />
             }
         },
         {
@@ -119,12 +119,12 @@ const reportListMana = () => {
         {
             title: '操作',
             key: 'option',
-            width:90,
+            width: 90,
             valueType: 'option',
             renderText: (_: any, record: any) => {
 
                 return [
-                    <UpDateActBtn record={{...record,id:null,request:true}} type='EDIT' onUpdated={()=>getTableData({ reportCode: _currentSelectedType.code })}  />,
+                    <UpDateActBtn record={{ ...record, id: null, request: true }} type='EDIT' onUpdated={() => getTableData({ reportCode: _currentSelectedType.code })} />,
                     <Popconfirm
                         title="是否确认删除?"
                         key="del"
@@ -146,7 +146,7 @@ const reportListMana = () => {
         const { reportCode } = params;
 
         if (reportCode) {
-            const resp = await getClolumnTableData({...params,pageSize:500,current:1});
+            const resp = await getClolumnTableData({ ...params, pageSize: 500, current: 1 });
             if (resp) {
                 //const dataSorted = resp.sort((prev:any,cur:any)=>prev.sort - cur.sort);
                 setDataSource(resp.list);
@@ -182,11 +182,11 @@ const reportListMana = () => {
         }
     }
 
-    const delTableData = async (id:number) => {
+    const delTableData = async (id: number) => {
         const resp = await delData(id);
-        if(resp){
-              message.success('操作成功!');
-              getTableData({ reportCode: _currentSelectedType.code });
+        if (resp) {
+            message.success('操作成功!');
+            getTableData({ reportCode: _currentSelectedType.code });
         }
     }
 
@@ -199,32 +199,34 @@ const reportListMana = () => {
         }
     }
 
-    const tableSelecterCommit = async (keys:Key[], rows:any[]) => {
-          const result = rows.map((a,index)=>({
-            reportCode:_currentSelectedType.code,
-            columnCode:a.code,
-            columnHeaderText:a.headerText,
-            columnName:a.name,
-            sort:index+1
-          }))
-          const resp = await addReportTbaleData(result);
-          if(resp){
+    const tableSelecterCommit = async (keys: Key[], rows: any[]) => {
+        const result = rows.map((a, index) => ({
+            reportCode: _currentSelectedType.code,
+            columnCode: a.code,
+            columnHeaderText: a.headerText,
+            columnName: a.name,
+            sort: index + 1
+        }))
+        const resp = await addReportTbaleData(result);
+        if (resp) {
             message.success('操作成功');
             set_tableSelecterVisible(false);
             getTableData({ reportCode: _currentSelectedType.code });
-          }
+        }
     }
 
 
     const updateTable = async (formVal: any, type: 'EDIT' | "ADD" | 'ADD_LEFTDATA' | 'EDIT_LEFTDATA', data?: any[]) => {
 
-        // console.log({formVal,type});
+        // console.log({ formVal, type });
 
         if (type == 'ADD_LEFTDATA') {
             const resp = await addReport({
                 name: formVal.name,
                 shortName: formVal.shortName,
-                type: formVal.type
+                type: formVal.type,
+                indexType: formVal.indexType,
+                reportIndex: formVal.variableList
             });
             if (resp) {
                 getPageLeftReports();
@@ -238,7 +240,9 @@ const reportListMana = () => {
                 id: formVal.id,
                 name: formVal.name,
                 shortName: formVal.shortName,
-                type: formVal.type
+                type: formVal.type,
+                indexType: formVal.indexType,
+                reportIndex: formVal.variableList
             });
             if (resp) {
                 getPageLeftReports();
@@ -261,67 +265,165 @@ const reportListMana = () => {
 
     }
 
+
     const UpDataActBtn = ({ record, type }: { record: any, type: 'EDIT' | 'ADD' | 'ADD_LEFTDATA' | 'EDIT_LEFTDATA' }) => {
+        const [rows, set_rows] = useState<any[]>([]);
+        const [form] = Form.useForm(); // 创建表单实例
 
         const getTrriger = () => {
-            if (type == 'ADD') {
-                return <span className='add'>新增</span>
+            if (type === 'ADD') {
+                return <span className='add'>新增</span>;
             }
-            if (type == 'EDIT') {
-                return <a key="edit" >编辑</a>
+            if (type === 'EDIT') {
+                return <a key="edit">编辑</a>;
             }
-            if (type == 'ADD_LEFTDATA') {
+            if (type === 'ADD_LEFTDATA') {
                 return (
                     <div className='add'>
                         <img src={require('../../../../../static/addIcon_black.png')} alt="" />
                     </div>
-                )
+                );
             }
-            if (type == 'EDIT_LEFTDATA') {
-                return <a key="edit" >编辑</a>
+            if (type === 'EDIT_LEFTDATA') {
+                return <a key="edit">编辑</a>;
             }
-        }
+        };
+
+        // 初始化表单和 rows 数据
+        useEffect(() => {
+            if (type === 'EDIT_LEFTDATA' && record?.reportIndex && record.indexType === 2) {
+                // 初始化 rows 数据
+                const initialRows = record.reportIndex.map((a: any) => ({
+                    id: a.id,
+                    varName: a.columnIndex,
+                    tip: a.tips,
+                }));
+                set_rows(initialRows);
+
+                // 设置表单的初始值
+                const initialValues = record.reportIndex.reduce((acc: any, item: any) => {
+                    acc[`varName_${item.id}`] = item.columnIndex;
+                    acc[`tip_${item.id}`] = item.tips;
+                    return acc;
+                }, {});
+                // console.log({ initialValues });
+                form.setFieldsValue({ ...record, ...initialValues });
+            } else {
+                if (type === 'ADD_LEFTDATA') {
+                    form.setFieldsValue({ ...record, indexType: 0 });
+                } else {
+                    form.setFieldsValue({ ...record });
+                }
+
+            }
+        }, [type, record, form]);
+
+        // 处理表单变化的函数
+        const handleValuesChange = (changedValues: any, allValues: any) => {
+            const updatedRows = rows.map(row => {
+                if (allValues[`varName_${row.id}`] !== undefined) {
+                    row.varName = allValues[`varName_${row.id}`];
+                }
+                if (allValues[`tip_${row.id}`] !== undefined) {
+                    row.tip = allValues[`tip_${row.id}`];
+                }
+                return row;
+            });
+            set_rows(updatedRows); // 更新 rows 状态
+        };
+
+        const handleFinish = async (val: any) => {
+            const formData = {
+                ...val,
+                variableList: val.indexType == 2 ? rows.map((a: any) => ({ columnIndex: a.varName, tips: a.tip })) : null, // 将 rows 数组包含在提交的数据中
+            };
+
+            // 删除不需要的动态生成的表单字段
+            Object.keys(formData).forEach(key => {
+                if (key.startsWith("varName_") || key.startsWith("tip_")) {
+                    delete formData[key];
+                }
+            });
+
+            return updateTable(type === 'EDIT_LEFTDATA' ? { ...record, ...formData } : formData, type);
+        };
 
         return (
             <ModalForm
-                title={type == 'ADD_LEFTDATA' ? `新增报表` : `编辑报表`}
+                form={form} // 绑定 form 实例
+                title={type === 'ADD_LEFTDATA' ? `新增报表` : `编辑报表`}
                 width={352}
-                initialValues={type == 'EDIT_LEFTDATA' ? { ...record } : {}}
-                trigger={
-                    getTrriger()
-                }
-                onFinish={(val) => {
-                    return updateTable(type == 'EDIT_LEFTDATA' ? { ...record, ...val } : val, type);
-                }}
+                onFinish={handleFinish}
+                trigger={getTrriger()}
+                onValuesChange={handleValuesChange} // 添加表单变化处理
             >
-
-                <ProFormText
-                    label='报表名称:'
-                    name='name'
-                    rules={[{ required: true, message: '报表名称不能为空!' }]}
-                />
-                <ProFormText
-                    label='报表简称:'
-                    name='shortName'
-                    rules={[{ required: true, message: '报表简称不能为空!' }]}
-                />
-                <ProFormSelect
-                    name="type"
-                    label="报表类型:"
-                    placeholder="请选择"
+                <ProFormText label='报表名称:' name='name' rules={[{ required: true, message: '报表名称不能为空!' }]} />
+                <ProFormText label='报表简称:' name='shortName' rules={[{ required: true, message: '报表简称不能为空!' }]} />
+                <ProFormSelect name="type" label="报表类型:" placeholder="请选择"
                     request={async () => {
                         const resp = await getTargetDic('REPORT_TYPE');
                         if (resp) {
                             const { dataVoList } = resp;
                             return dataVoList.map((a: any) => ({ label: a.name, value: a.code }));
-                        }
-                        return []
+                        } return []
+                    }} rules={[{ required: true, message: '列类型不能为空!' }]} />
+
+                <div style={{ display: 'flex', flexDirection: 'row' }}>
+                    <ProFormRadio.Group
+                        name="indexType"
+                        label={<>检索方式:<Tooltip title={<span>无:不显示检索框;<br />主键检索:需在主键列SQL配置检索条件,最多可配置5个;<br />列检索:需选择要检索的列,只可在已展示数据里检索"</span>}><IconFont type='icon-jinggaotishi' /></Tooltip></>}
+                        options={[
+                            { label: '无', value: 0 },
+                            { label: '列检索', value: 1 },
+                            { label: '主键检索', value: 2 },
+                        ]}
+                        rules={[{ required: true }]}
+                    />
+                </div>
+
+                <ProFormDependency name={['indexType']}>
+                    {({ indexType }) => {
+                        return indexType === 2 && (
+                            <>
+                                {/* 动态添加的行 */}
+                                <div className='rowWrap' style={{ maxHeight: 247, overflowY: 'scroll' }}>
+                                    {rows.map((item, index) => (
+                                        <div key={index} style={{ display: 'flex', flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>
+                                            <ProFormText
+                                                width={140}
+                                                label='变量名称:'
+                                                name={`varName_${item.id}`} // 绑定唯一的 name 属性
+                                                placeholder='请输入'
+                                            />
+                                            <ProFormText
+                                                width={140}
+                                                label='提示文案:'
+                                                name={`tip_${item.id}`} // 绑定唯一的 name 属性
+                                                placeholder='请输入'
+                                            />
+                                            <div className='del' onClick={() => set_rows(prevItems => prevItems.filter(a => a.id !== item.id))} style={{
+                                                display: 'flex', width: 24, height: 24, justifyContent: 'center', position: 'relative', top: 2,
+                                                alignItems: 'center', border: '1px solid #DAE2F2', borderRadius: 4, background: '#FAFCFF', cursor: 'pointer'
+                                            }}><IconFont type={'iconshanchu'} /></div>
+                                        </div>
+                                    ))}
+                                </div>
+                                {rows.length <= 4 &&(
+                                    <div className='addBtn' onClick={() => set_rows([...rows, { id: Math.random(), varName: '', tip: '' }])} style={{
+                                        height: 40, border: '1px dashed #CFD6E6', borderRadius: 4, color: '#3376FE', display: 'flex',
+                                        flexDirection: 'row', justifyContent: 'center', alignItems: 'center', cursor: 'pointer'
+                                    }}><IconFont style={{ paddingRight: 8 }} type={'icon-zengjia'} />增加一行</div>
+                                )}
+                            </>
+
+                        );
                     }}
-                    rules={[{ required: true, message: '列类型不能为空!' }]}
-                />
+                </ProFormDependency>
             </ModalForm>
-        )
-    }
+        );
+    };
+
+
 
 
 
@@ -339,7 +441,7 @@ const reportListMana = () => {
         rightColumns: ColumnsType<DataType>;
         record: any
     }
- 
+
 
 
     const moreItems: MenuProps['items'] = [
@@ -404,7 +506,7 @@ const reportListMana = () => {
             }
         },
     );
-    
+
     const DraggableContainer = (props: any) => (
         <SortContainer
             useDragHandle
@@ -438,9 +540,12 @@ const reportListMana = () => {
 
     useEffect(() => {
         if (showTypeListArr.length > 0) {
-            set_currentSelectedType(showTypeListArr[0]);
-            _currentSelectedType = showTypeListArr[0];
-            set_tableDataFilterParams({ ...tableDataFilterParams, reportCode: showTypeListArr[0].code });
+            if(!currentSelectedType){
+                set_currentSelectedType(showTypeListArr[0]);
+                _currentSelectedType = showTypeListArr[0];
+                set_tableDataFilterParams({ ...tableDataFilterParams, reportCode: showTypeListArr[0].code });
+            }
+            
         }
     }, [showTypeListArr]);
 
@@ -487,13 +592,13 @@ const reportListMana = () => {
             )}
             <div className='left'>
                 <div className='toolbar'>
-                    <Input placeholder={'报表名称'} allowClear
+                    <Input placeholder={'报表名称'} allowClear autoComplete='off'
                         suffix={
-                            <IconFont type="iconsousuo"  style={{color:'#99A6BF'}}/>
+                            <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} />
                         }
                         style={{ width: 156 }}
                         onChange={(e) => {
-                            const result = typeList.filter(item => item.reportName.indexOf(e.target.value) != -1);
+                            const result = typeList.filter(item => item.name.indexOf(e.target.value) != -1);
                             set_showTypeListArr(result);
                         }}
 
@@ -550,7 +655,7 @@ const reportListMana = () => {
                 </div>
                 <div style={{ marginTop: 16 }}>
                     {currentSelectedType && <KCIMTable actionRef={tableRef} columns={tableColumn}
-                        scroll={{y:`calc(100vh - 233px)`}}
+                        scroll={{ y: `calc(100vh - 233px)` }}
                         rowKey='id'
                         dataSource={dataSource}
                         tableAlertRender={false}
@@ -574,4 +679,4 @@ const reportListMana = () => {
 }
 
 
-export default reportListMana;
+export default reportListMana;

+ 2 - 2
src/pages/costLibraryManagement/reportMana/reportNavSet/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:43:15
+ * @LastEditTime: 2024-09-09 10:41:29
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -322,7 +322,7 @@ export default function ReportNavSet() {
                 <div className='filter'>
                     <div className='filterItem'>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'请输入源报表名称'} allowClear
+                        <Input placeholder={'请输入源报表名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{color:'#99A6BF'}} onClick={() => tableDataSearchHandle('reportName')} />
                             }

+ 876 - 0
src/pages/departmentCostCheck/index.tsx

@@ -0,0 +1,876 @@
+/*
+ * @Author: code4eat awesomedema@gmail.com
+ * @Date: 2023-03-03 11:30:33
+ * @LastEditors: code4eat awesomedema@gmail.com
+ * @LastEditTime: 2024-12-05 15:11:30
+ * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+
+import KCIMPagecontainer from '@/components/KCIMPageContainer';
+import { KCIMTable } from '@/components/KCIMTable';
+
+import { createFromIconfontCN } from '@ant-design/icons';
+
+
+import { ActionType, ProFormInstance } from '@ant-design/pro-components';
+
+import { ProColumns } from '@ant-design/pro-table';
+import { Modal, message, Tabs, Input, DatePicker, Popover, Alert } from 'antd';
+import { Key, useEffect, useRef, useState } from 'react';
+import * as XLSX from 'xlsx';
+import { saveAs } from 'file-saver';
+import moment from 'moment';
+import 'moment/locale/zh-cn';
+import locale from 'antd/es/date-picker/locale/zh_CN';
+
+
+
+import { computeProfitReq, getNextLevelTableData, getReportDataReq, getReportProjectSettingList, getResponsibleCenters } from './service';
+
+import './style.less';
+import React from 'react';
+
+import { getDicDataBySysId, getParamsDataBySysId } from '@/services/getDic';
+import { KCIMLeftList } from '@/components/KCIMLeftList';
+import { formatMoneyNumber } from '@/utils/format';
+import { useModel } from '@umijs/max';
+import ReportExport from '../reportExport/report';
+import { getUserHasReports } from '../costAccounting/calcPageTemplate/service';
+
+
+const { RangePicker } = DatePicker;
+
+
+const IconFont = createFromIconfontCN({
+    scriptUrl: '',
+});
+
+let currentRow: any = undefined;
+
+function findAllParents(tree: any[]) {
+    let parents: any[] = [];
+    // 递归函数来遍历树并找到所有父节点
+    function traverse(nodes: any[]) {
+        for (const node of nodes) {
+            // 检查节点是否有子节点
+            if (node.children && node.children.length > 0) {
+                parents.push(node); // 添加到父节点列表
+                traverse(node.children); // 递归遍历子节点
+            }
+        }
+    }
+
+    traverse(tree); // 开始遍历树
+    return parents; // 返回所有父节点的数组
+}
+
+
+
+function countLeafNodesRecursive(node: any) {
+    // 如果当前节点没有子节点,说明它是一个叶子节点
+    if (!node.children || node.children.length === 0) {
+        return 1;
+    }
+
+    let leafCount = 0;
+
+    // 递归计算每个子节点的叶子节点数
+    for (let i = 0; i < node.children.length; i++) {
+        leafCount += countLeafNodesRecursive(node.children[i]);
+    }
+
+    return leafCount;
+}
+
+
+// 数据转换函数
+const transformData = (data: any[]) => {
+    const resultMap: Map<string, { reportName: string; key: string; children?: any[];[key: string]: any }> = new Map();
+
+    // 转换单个条目
+    const transformEntry = (entry: any, computeDate: string) => {
+        if (!entry) return {};
+        const transformedEntry = { ...entry };
+        transformedEntry[`${computeDate}_amount`] = entry.amount != null ? formatMoneyNumber(entry.amount) : null;
+        transformedEntry[`${computeDate}_percent`] = entry.percent != null ? `${((entry.percent * 100).toFixed(2))}%` : null;
+        return transformedEntry;
+    };
+
+    // 合并新的条目到现有条目,不覆盖已有的字段
+    const mergeEntries = (existingEntry: any, newEntry: any) => {
+        for (const key in newEntry) {
+            if (!existingEntry[key] || key.endsWith('_amount') || key.endsWith('_percent')) {
+                existingEntry[key] = newEntry[key];
+            }
+        }
+    };
+
+    // 递归处理每个节点及其子节点
+    const processNode = (node: any, computeDate: string): any => {
+        if (!node) return {};
+
+        const transformedNode = transformEntry(node, computeDate);
+
+        if (node.children && Array.isArray(node.children)) {
+            const processedChildren = node.children.map((child: any) => processNode(child, computeDate));
+            transformedNode.children = mergeChildren(transformedNode.children || [], processedChildren);
+        }
+
+        return transformedNode;
+    };
+
+    // 合并子节点,确保同一个父节点下的子节点是唯一的
+    const mergeChildren = (existingChildren: any[], newChildren: any[]) => {
+        newChildren.forEach((newChild) => {
+            const existingChild = existingChildren.find((child) => child.reportName === newChild.reportName && child.key === newChild.key);
+
+            if (existingChild) {
+                mergeEntries(existingChild, newChild);
+                if (newChild.children && Array.isArray(newChild.children)) {
+                    existingChild.children = mergeChildren(existingChild.children || [], newChild.children);
+                }
+            } else {
+                existingChildren.push(newChild);
+            }
+        });
+
+        return existingChildren;
+    };
+
+    // 主处理逻辑
+    data.forEach((item) => {
+        const { computeDate, profitVoList } = item;
+
+        if (!profitVoList || !Array.isArray(profitVoList)) {
+            return;
+        }
+
+        profitVoList.forEach((profit) => {
+            if (!resultMap.has(profit.reportName)) {
+                resultMap.set(profit.reportName, {
+                    ...transformEntry(profit, computeDate),
+                    key: profit.reportName,
+                });
+            }
+
+            const existingEntry = resultMap.get(profit.reportName)!;
+            const transformedProfit = processNode(profit, computeDate);
+
+            mergeEntries(existingEntry, transformedProfit);
+
+            if (transformedProfit.children && Array.isArray(transformedProfit.children)) {
+                existingEntry.children = mergeChildren(existingEntry.children || [], transformedProfit.children);
+            }
+        });
+    });
+
+    // 确保每个层级的数据都有完整的月份字段
+    const fillMissingMonths = (nodes: any[], computeDates: string[]) => {
+        nodes.forEach((node) => {
+            computeDates.forEach((date) => {
+                if (!node.hasOwnProperty(`${date}_amount`)) {
+                    node[`${date}_amount`] = node.amount != null ? formatMoneyNumber(node.amount) : null;
+                }
+                if (!node.hasOwnProperty(`${date}_percent`)) {
+                    node[`${date}_percent`] = node.percent != null ? `${((node.percent * 100).toFixed(2))}%` : null;
+                }
+            });
+
+            if (node.children && Array.isArray(node.children)) {
+                fillMissingMonths(node.children, computeDates);
+                if (node.children.length === 0) {
+                    delete node.children;
+                }
+            }
+        });
+    };
+
+    const computeDates = data.map((item) => item.computeDate);
+
+    const transformedData = Array.from(resultMap.values());
+
+    fillMissingMonths(transformedData, computeDates);
+
+    transformedData.forEach((node) => {
+        if (node.children && node.children.length === 0) {
+            delete node.children;
+        }
+    });
+
+    // console.log({ transformedData });
+    return transformedData;
+};
+
+
+const getNextUnexpandedKeys = (data: any[], expandedKeys: any[] = []) => {
+    let keys: any[] = [];
+
+    const traverse = (nodes: any) => {
+        for (const node of nodes) {
+            // 如果当前节点还没有展开,就把它加入 keys
+            if (!expandedKeys.includes(node.id)) {
+                keys.push(node.id);
+            }
+
+            // 如果当前节点已经展开,继续遍历子节点
+            if (node.children && expandedKeys.includes(node.id)) {
+                traverse(node.children);
+            }
+        }
+    };
+
+    traverse(data);
+
+    return keys;
+};
+
+
+export default function DepartmentCostCalc() {
+
+    const [tableDataFilterParams, set_tableDataFilterParams] = useState<any | undefined>({ reportType: 0 });
+    const tableRef = useRef<ActionType>();
+    const [tabs, set_tabs] = useState<any[]>([]);
+
+    const { initialState, setInitialState } = useModel('@@initialState');
+    const [computeRangeDate, set_computeRangeDate] = useState<string[]>(initialState ? [initialState.computeDate, initialState.computeDate] : []);
+    const [responsibleCenters, set_responsibleCenters] = useState<any[]>([]);
+    const [currentTabKey, set_currentTabKey] = useState<any | undefined>(undefined);
+    const [currentTab, set_currentTab] = useState<any | undefined>(undefined);
+    const [currentSelectedRespon, set_currentSelectedRespon] = useState<any | undefined>(undefined);
+    const [tableDataSearchKeywords, set_tableDataSearchKeywords] = useState('');
+    const [allParentsKeys, set_allParentsKeys] = useState<Key[]>([]);
+
+    const [dataSource, set_dataSource] = useState<any[]>([]);
+    const [calcResultText, set_calcResultText] = useState<undefined | string>(undefined);
+    const [nextLevel, set_nextLevel] = useState<any>(undefined);
+
+    const [columns, set_columns] = useState<any[]>([]);
+    const [needShowReportCode, set_needShowReportCode] = useState('0');
+
+
+    // 动态生成列定义函数
+    const generateDataColumns = async (data: any[]) => {
+        const baseColumns = [
+            {
+                title: '报表项目名称',
+                dataIndex: 'reportName',
+                key: 'reportName',
+                width: 200,
+                fixed: 'left'
+            },
+        ];
+
+        let ifShowPercent = true;
+
+        const { systemId } = JSON.parse(localStorage.getItem('currentSelectedTab') as string)
+        const resp = await getParamsDataBySysId(systemId, '1851077044079824896');
+        if (resp) {
+            ifShowPercent = resp.value == '1' ? true : false;
+        }
+
+
+        // 获取所有月份并生成列
+        const monthColumns = data.map((item) => {
+            const month = item.computeDate;
+            const base = [
+                {
+                    title: '金额',
+                    dataIndex: `${month}_amount`,
+                    key: `${month}_amount`,
+                    width: 100,
+                    align: 'right',
+                    renderText(num: number, record: any) {
+
+                        const { calcType } = record;
+                        if (calcType == 0) {
+                            return <React.Fragment></React.Fragment>
+                        } else {
+                            if (calcType == 1 || calcType == 2 || calcType == 5) {
+                                return <span onClick={() => { set_nextLevel({ ...record, date: month }); tableRef.current?.reload() }} style={{ color: (calcType == 1 || calcType == 2 || calcType == 5) ? '#3377FF' : '#17181A', cursor: (calcType == 1 || calcType == 2 || calcType == 5) ? 'pointer' : 'default' }}>{num}</span>;
+                            } else {
+                                return num
+                            }
+
+                            //return formatMoneyNumber(num);
+                        }
+                    },
+                },
+            ]
+            return {
+                title: month,
+                children: ifShowPercent ? [
+                    ...base,
+                    {
+                        title: '占比',
+                        dataIndex: `${month}_percent`,
+                        key: `${month}_percent`,
+                        width: 100,
+                        align: 'right',
+                        renderText(text: number, record: any) {
+
+                            const { calcType } = record;
+                            if (calcType == 0) {
+                                return <React.Fragment></React.Fragment>
+                            } else {
+                                return text
+                            }
+
+                        },
+                    },
+                ] : [...base]
+            };
+        });
+        set_columns([...baseColumns, ...monthColumns]);
+
+    };
+
+
+    const getIfShowReport = async () => {
+        const { systemId } = JSON.parse(localStorage.getItem('currentSelectedTab') as string)
+        const resp = await getParamsDataBySysId(systemId, '1845698984623083520');
+        if (resp) {
+            set_needShowReportCode(resp.value)
+        }
+    }
+
+
+    const getTableData = async (params: any) => {
+        const { responsibilityCode, filter = undefined } = params;
+        if (!responsibilityCode) return []
+
+        if (!nextLevel) {
+            const resp = await getReportProjectSettingList({ ...params });
+            if (resp) {
+                // if (filter) {
+                //     const filterData = searchTree(resp, filter);
+                //     const allParents = findAllParents(filterData);
+
+                //     set_allParentsKeys([...(allParents.map((a: any) => a.id))])
+                //     return {
+                //         data: filterData,
+                //         success: true,
+                //     }
+                // }
+
+                const realData = transformData(resp);
+                if (currentTab.value == '1') {
+                    const allParents = findAllParents(realData);
+
+                    set_allParentsKeys([...(allParents.map((a: any) => a.id))]);
+                }
+
+
+                generateDataColumns(resp)
+                set_dataSource(realData);
+                return {
+                    data: realData,
+                    success: true,
+                }
+            }
+        }
+
+        if (nextLevel) {
+            const { reportId, calcType, date } = nextLevel;
+
+            if (calcType == 1) {
+                set_columns([
+                    {
+                        title: '会计科目代码',
+                        dataIndex: 'accountCode',
+                        key: 'accountCode',
+                    },
+                    {
+                        title: '会计项目名称',
+                        dataIndex: 'accountName',
+                        key: 'accountName',
+                    },
+                    {
+                        title: '金额',
+                        dataIndex: 'amount',
+                        key: 'amount',
+                        align: 'right',
+                        renderText(num: number, record: any) {
+                            return formatMoneyNumber(num)
+                        }
+                    }
+                ])
+                const resp = await getNextLevelTableData({
+                    computeDate: date,
+                    reportId,
+                    reportType: currentTabKey,
+                    responsibilityCode: currentSelectedRespon.responsibilityCode
+                });
+
+                return {
+                    data: resp ? resp : [],
+                    success: true,
+                }
+            }
+            if (calcType == 2 || calcType == 5) {
+                const columns = [
+                    {
+                        title: () => <React.Fragment></React.Fragment>,
+                        key: 'empty',
+                        children: [
+                            {
+                                title: '责任中心',
+                                dataIndex: 'responsibilityCenter',
+                                key: 'responsibilityCenter',
+                                render: (text: any, row: { responsibilityCenterRowSpan: any; }) => {
+                                    return {
+                                        children: text,
+                                        props: {
+                                            rowSpan: row.responsibilityCenterRowSpan,
+                                        },
+                                    };
+                                },
+                            },
+                            {
+                                title: '项目名称',
+                                dataIndex: 'projectName',
+                                key: 'projectName',
+                                render: (text: any, row: { projectNameRowSpan: any; }) => {
+                                    return {
+                                        children: text,
+                                        props: {
+                                            rowSpan: row.projectNameRowSpan,
+                                        },
+                                    };
+                                },
+                            },
+                            {
+                                title: '分摊参数',
+                                dataIndex: 'shareParam',
+                                key: 'shareParam',
+                            },
+                            {
+                                title: '分摊金额',
+                                dataIndex: 'shareAmount',
+                                key: 'shareAmount',
+                                align: 'right'
+                            },
+                        ]
+                    },
+                    {
+                        title: `${currentSelectedRespon.responsibilityName}`,
+                        dataIndex: `${currentSelectedRespon.responsibilityCode}`,
+                        key: `${currentSelectedRespon.responsibilityCode}`,
+                        children: [
+                            {
+                                title: '分摊参数数值',
+                                dataIndex: 'shareParamValue',
+                                key: 'shareParamValue',
+                            },
+                            {
+                                title: '分摊参数占比',
+                                dataIndex: 'shareParamRate',
+                                key: 'shareParamRate',
+                            },
+                            {
+                                title: '金额',
+                                dataIndex: 'amount',
+                                key: 'amount',
+                            },
+                        ]
+                    }
+                ];
+                set_columns([...columns]);
+                const resp = await getNextLevelTableData({
+                    computeDate: date,
+                    reportId,
+                    reportType: currentTabKey,
+                    responsibilityCode: currentSelectedRespon.responsibilityCode
+                });
+
+                const processData = (data: any[]) => {
+                    const rows: any[] = [];
+                    data.forEach((item, index) => {
+                        let responseNameRowSpan = 0; // 合并相同责任中心的单元格
+                        item.dataList.forEach((dataItem: any) => {
+                            responseNameRowSpan += dataItem.shareParamData.length; // 计算需要合并的行数
+                        });
+
+                        let currentRow = 0; // 当前行位置
+                        item.dataList.forEach((dataItem: any) => {
+                            const dataItemRowSpan = dataItem.shareParamData.length; // 项目名称的行合并数
+                            dataItem.shareParamData.forEach((param: any, paramIndex: number) => {
+                                rows.push({
+                                    key: `${item.responseCode}-${dataItem.alias}-${param.shareParamCode}`,
+                                    responsibilityCenter: paramIndex === 0 && currentRow === 0 ? item.responseName : '',
+                                    responsibilityCenterRowSpan: paramIndex === 0 && currentRow === 0 ? responseNameRowSpan : 0,
+                                    projectName: paramIndex === 0 ? dataItem.alias : '',
+                                    projectNameRowSpan: paramIndex === 0 ? dataItemRowSpan : 0,
+                                    shareParam: param.shareParamName,
+                                    shareAmount: formatMoneyNumber(param.shareParamAmount),
+                                    shareParamValue: param.shareParamNum,
+                                    shareParamRate: param.shareParamRate,
+                                    amount: formatMoneyNumber(param.shareParamValue),
+                                });
+                            });
+                            currentRow++;
+                        });
+                    });
+                    return rows;
+                };
+
+                return {
+                    data: resp ? processData(resp) : [],
+                    success: true,
+                }
+            }
+
+        }
+
+        return []
+    }
+
+
+
+
+    const onTabChanged = (key: Key) => {
+        set_currentTabKey(key);
+        const needItem = tabs.filter((a) => a.key == key);
+        if (needItem.length > 0) set_currentTab(needItem[0])
+    }
+
+    const getTabs = async () => {
+
+        // const { systemId } = JSON.parse((localStorage.getItem('currentSelectedTab')) as string)
+        // const resp = await getDicDataBySysId(systemId, 'PROFIT_REPORT_TYPE');
+        const resp = await getUserHasReports();
+        if (resp) {
+            const { dataVoList } = resp;
+            const tempArr = dataVoList.map((a: any) => ({ label: a.name, key: Number(a.code), value: a.value }));
+            const arr = (tempArr.filter((a: any) => a.value != '2'));
+            set_tabs([...arr]);
+            set_currentTabKey(arr[0].key);
+            set_currentTab(arr[0]);
+        }
+    }
+
+    const getResponsibleCenterList = async (reportType: string) => {
+        const resp = await getResponsibleCenters(reportType);
+        if (resp) {
+            set_responsibleCenters(resp);
+        }
+    }
+
+    const onLeftChange = (currentSelected: any) => {
+        set_currentSelectedRespon(currentSelected);
+    }
+
+    const backToHandle = () => {
+        set_nextLevel(undefined);
+        tableRef.current?.reload();
+    }
+
+    const tableDataSearchHandle = (paramName: string) => {
+
+        set_tableDataFilterParams({
+            ...tableDataFilterParams,
+            [`${paramName}`]: tableDataSearchKeywords
+        })
+    }
+
+
+    const getHeaderRows = (columns: any[], level = 0, headerRows: any[] = [], maxLevel = 0) => {
+        headerRows[level] = headerRows[level] || [];
+        columns.forEach((col: { title: any; children: any; }) => {
+            const colSpan = getColSpan(col);
+            headerRows[level].push({ title: col.title, colSpan, rowSpan: col.children ? 1 : maxLevel - level });
+            if (col.children) {
+                getHeaderRows(col.children, level + 1, headerRows, maxLevel);
+            } else {
+                // 填充空白单元格
+                for (let i = level + 1; i < maxLevel; i++) {
+                    headerRows[i] = headerRows[i] || [];
+                    headerRows[i].push({ title: '', colSpan: 1, rowSpan: 1 });
+                }
+            }
+        });
+        return headerRows;
+    };
+
+    const getColSpan: any = (col: { children: any[]; }) => {
+        if (!col.children) return 1;
+        return col.children.reduce((sum, child) => sum + getColSpan(child), 0);
+    };
+
+    const getMaxLevel = (col: any) => {
+        if (!col.children) return 1;
+        return 1 + Math.max(...col.children.map(getMaxLevel));
+    };
+
+    const extractLeafColumns = (columns: any[]) => {
+        let leafColumns: any[] = [];
+        columns.forEach(col => {
+            if (col.children) {
+                leafColumns = leafColumns.concat(extractLeafColumns(col.children));
+            } else {
+                leafColumns.push(col);
+            }
+        });
+        return leafColumns;
+    };
+
+    const addRowWithIndentation = (record: any, level: number, leafColumns: any[], worksheetData: any[]) => {
+        const row = leafColumns.map(col => record[col.dataIndex] ?? '');
+        row[0] = ' '.repeat(level * 4) + row[0]; // 在第一列前添加缩进空格以表示层级
+        worksheetData.push(row);
+        if (record.children) {
+            record.children.forEach((child: any) => addRowWithIndentation(child, level + 1, leafColumns, worksheetData));
+        }
+    };
+
+    const handleExport = () => {
+        try {
+            const workbook = XLSX.utils.book_new();
+            const worksheetData: any[] = [];
+
+            // 获取最大层级
+            const maxLevel = columns.reduce((max, col) => Math.max(max, getMaxLevel(col)), 0);
+
+            // 生成多层级表头
+            const headerRows = getHeaderRows(columns, 0, [], maxLevel);
+
+            // 构建表头行
+            headerRows.forEach((row: any, rowIndex) => {
+                const rowData: string[] = [];
+                row.forEach((cell: { title: any; colSpan: number; rowSpan: number; }) => {
+                    rowData.push(cell.title);
+                    for (let i = 1; i < cell.colSpan; i++) {
+                        rowData.push('');
+                    }
+                });
+                worksheetData.push(rowData);
+            });
+
+            // 填充单层表头的空白行
+            if (maxLevel > 1) {
+                const numColumns = headerRows[0].reduce((sum: any, cell: { colSpan: any; }) => sum + cell.colSpan, 0);
+                for (let i = 1; i < maxLevel; i++) {
+                    while (worksheetData[i].length < numColumns) {
+                        worksheetData[i].push('');
+                    }
+                }
+            }
+
+            // 提取最内层表头列
+            const leafColumns = extractLeafColumns(columns);
+
+            // 添加数据并处理树结构
+            dataSource.forEach(record => addRowWithIndentation(record, 0, leafColumns, worksheetData));
+
+            const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);
+
+            // 初始化合并单元格数组
+            worksheet['!merges'] = worksheet['!merges'] || [];
+
+            // 合并单元格
+            headerRows.forEach((row: any, rowIndex) => {
+                let colIndex = 0;
+                row.forEach((cell: { colSpan: number; rowSpan: number; }) => {
+                    if (cell.colSpan > 1 || cell.rowSpan > 1) {
+                        worksheet['!merges']!.push({  // 使用非空断言 '!'
+                            s: { r: rowIndex, c: colIndex },
+                            e: { r: rowIndex + cell.rowSpan - 1, c: colIndex + cell.colSpan - 1 }
+                        });
+                    }
+                    colIndex += cell.colSpan;
+                });
+            });
+
+            // 设置单元格对齐方式
+            Object.keys(worksheet).forEach(cell => {
+                if (cell[0] !== '!') {
+                    worksheet[cell].s = {
+                        alignment: { vertical: 'center', horizontal: 'center' }
+                    };
+                }
+            });
+
+            XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+
+            const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' });
+            const s2ab = (s: string) => {
+                const buf = new ArrayBuffer(s.length);
+                const view = new Uint8Array(buf);
+                for (let i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF;
+                return buf;
+            };
+
+            saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), currentTab ? `${currentTab.label}.xlsx` : 'table_data.xlsx');
+        } catch (error) {
+            console.error('Export failed:', error);
+        }
+    };
+
+
+    const handleExpandNext = () => {
+        // 当前所有未展开的节点,第一层优先展开
+        const keysToExpand = getNextUnexpandedKeys(dataSource, allParentsKeys);
+        set_allParentsKeys((prev) => Array.from(new Set([...prev, ...keysToExpand])));
+    };
+
+    const handleCollapseAll = () => {
+        set_allParentsKeys([]);
+    };
+
+
+
+
+    useEffect(() => {
+        if (computeRangeDate && currentTabKey != undefined) {
+            getResponsibleCenterList(currentTabKey);
+            set_nextLevel(undefined);
+            set_allParentsKeys([]);
+        }
+    }, [computeRangeDate, currentTabKey]);
+
+    useEffect(() => {
+        if (currentSelectedRespon) {
+            set_tableDataFilterParams({
+                ...tableDataFilterParams,
+                responsibilityCode: currentSelectedRespon.responsibilityCode,
+                reportType: currentTabKey,
+                beginComputeDate: computeRangeDate[0],
+                endComputeDate: computeRangeDate[1],
+            });
+            set_nextLevel(undefined);
+        }
+        set_allParentsKeys([]);
+    }, [currentSelectedRespon])
+
+
+    useEffect(() => {
+        getTabs();
+        getIfShowReport();
+    }, [])
+
+    return (
+        <KCIMPagecontainer className='DepartmentCostCalc' title={false}>
+            <div className='header'>
+                <div className="search">
+                    <span>核算年月:</span>
+                    <RangePicker
+                        onChange={(data, dateString) => {
+                            // console.log({data,dateString});
+                            set_computeRangeDate(dateString);
+                            setInitialState((s: any) => ({ ...s, computeDate: dateString[0], }))
+                            set_tableDataFilterParams({
+                                ...tableDataFilterParams,
+                                beginComputeDate: dateString[0],
+                                endComputeDate: dateString[1],
+                            });
+                        }}
+                        picker="month"
+                        locale={locale}
+                        autoComplete="off"
+                        defaultValue={[moment(computeRangeDate[0], 'YYYY-MM'), moment(computeRangeDate[1], 'YYYY-MM')]}
+                        format="YYYY-MM"
+                    />
+                </div>
+                {/* <div className='btnGoup'>
+                    <span className='onekeyCalcBtn' onClick={()=>onekeyComputeProfitHandle()}>一键计算</span>
+                </div> */}
+            </div>
+            <div className='content'>
+                <Tabs
+                    defaultActiveKey={tabs.length > 0 ? tabs[0].key : undefined}
+                    items={tabs}
+                    key={'key'}
+                    onChange={(key) => onTabChanged(key)}
+                />
+                {calcResultText && <Alert showIcon onClose={() => set_calcResultText(undefined)} icon={<IconFont type={(calcResultText.indexOf('失败') != -1) ? 'icon-cuowutishi' : 'icon-chenggongtishi'} />} closable style={{ padding: '4px 12px', marginBottom: 16, borderRadius: 4, border: (calcResultText.indexOf('失败') != -1) ? '1px solid #73E6BF' : '', background: (calcResultText.indexOf('失败') != -1) ? '#FFF1F3' : '#EBFFF8' }} message={calcResultText} type={calcResultText.indexOf('失败') != -1 ? 'error' : 'success'} />}
+                <div className='inner'>
+                    <div className='left'>
+                        <KCIMLeftList
+                            fieldNames={{ title: 'responsibilityName', key: 'responsibilityCode', children: 'children' }}
+                            rowKey={'responsibilityCode'}
+                            dataSource={responsibleCenters} searchKey={'responsibilityName'}
+                            onChange={onLeftChange}
+                            contentH={`100%`}
+                            // placeholder={leftListSearchPlaceHolder} 
+                            listType={'tree'}
+
+                        />
+                    </div>
+                    <div className='right'>
+                        <div className='toolBar'>
+                            <div className='filterItem' style={{ width: 228 }}>
+                                {/* <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
+                                <Input placeholder={'报表项目代码/名称'} allowClear autoComplete='off'
+                                    suffix={
+                                        <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
+                                    }
+                                    onChange={(e) => {
+                                        set_tableDataSearchKeywords(e.target.value);
+                                        if (e.target.value.length == 0) {
+                                            set_tableDataFilterParams({
+                                                ...tableDataFilterParams,
+                                                filter: ''
+                                            });
+                                        }
+                                    }}
+                                    onPressEnter={(e) => {
+                                        set_tableDataFilterParams({
+                                            ...tableDataFilterParams,
+                                            filter: ((e.target) as HTMLInputElement).value
+                                        });
+                                    }}
+
+                                /> */}
+                                {nextLevel && <div className='back' onClick={() => backToHandle()}><span><IconFont type='iconzhuye' /></span>{nextLevel.reportName}</div>}
+                            </div>
+
+                            {(!nextLevel||(nextLevel&&needShowReportCode == '0'))&&(
+                                <div className='btnGroup'>
+                                {/* <span className='btn' onClick={() => openTableDataDrawer()}>报表数据</span> */}
+                                <span className='btn' onClick={() => handleCollapseAll()}>全部折叠</span>
+                                <span className='btn' style={{ marginRight: 16 }} onClick={() => handleExpandNext()}>展开下一层</span>
+                                {!nextLevel && <span className='calc' onClick={() => handleExport()}>导出</span>}
+                            </div>
+                            )}
+                        </div>
+                        
+                        {needShowReportCode != '0'&&nextLevel&& (
+                            <ReportExport reportCode={needShowReportCode}
+                            tableScrollH={574}
+                            propsParams={{
+                                    compute_date: nextLevel.date,
+                                    reportId:nextLevel.reportId,
+                                    reportType:currentTabKey,
+                                    responsibilityCode: currentSelectedRespon.responsibilityCode
+                                }}
+                            />
+                        )}
+                        {(needShowReportCode == '0'||(needShowReportCode != '0'&&(!nextLevel))) && (
+                            <KCIMTable pagination={false}
+                                bordered
+                                rowClassName={(record) => (record.children ? 'has-children hover-row' : 'hover-row')}
+                                expandable={{
+                                    defaultExpandAllRows: true, expandedRowKeys: allParentsKeys,
+                                    onExpand(expanded, record) {
+                                        const { id } = record;
+                                        if (!expanded) {
+                                            const expandedKeys = allParentsKeys.filter(a => a != id);
+                                            set_allParentsKeys([...expandedKeys]);
+                                        } else {
+                                            set_allParentsKeys([...allParentsKeys, id]);
+                                        }
+                                    },
+                                }} columns={columns as ProColumns[]} scroll={{ y: `calc(100vh - 343px)` }} actionRef={tableRef} rowKey='id'
+                                params={tableDataFilterParams} request={(params) => getTableData(params)} />
+                        )}
+
+                    </div>
+                </div>
+
+
+            </div>
+        </KCIMPagecontainer>
+    )
+}

+ 139 - 0
src/pages/departmentCostCheck/service.ts

@@ -0,0 +1,139 @@
+/*
+ * @Author: code4eat awesomedema@gmail.com
+ * @Date: 2023-03-03 16:31:27
+ * @LastEditors: code4eat awesomedema@gmail.com
+ * @LastEditTime: 2024-09-13 14:24:40
+ * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/service.ts
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+
+import { Key } from 'react';
+import { request } from 'umi';
+
+//获取table列表数据
+export const getReportProjectSettingList = (params:any) => {
+  return request('/costAccount/costdepartmentprofit/getBatchComputeProfitList', {
+    method: 'GET',
+    params:{...params},
+  });
+}
+
+
+//获取下钻表格数据
+export const getNextLevelTableData = (params:any) => {
+  return request('/costAccount/costdepartmentprofit/getRedirectData', {
+    method: 'GET',
+    params:{...params},
+  });
+}
+
+
+
+//新增
+export type AddTableDataType = {
+  calcFormula?:string,
+  calcType?:number,
+  isLoss?:number,
+  parentId?:number,
+  reportName?:string,
+  reportType?:number,
+  sort?:number
+}
+
+export const addData = (data:AddTableDataType) => {
+  return request('/costAccount/reportForm/save', {
+    method: 'POST',
+    data:{...data}
+  });
+};
+
+
+
+//编辑表格数据
+
+export type TableRowEditType = {
+  id:number;
+}&AddTableDataType
+
+export const editData = (data:any) => {
+  return request('/costAccount/reportForm/edit', {
+    method: 'POST',
+    data
+  });
+};
+
+//删除表格操作
+export const delData = (ids:Key[]) => {
+  return request('/costAccount/reportForm/delete', {
+    method: 'POST',
+    data:ids
+  });
+};
+
+
+//根据关系类型,获取已绑定的关系数据
+export const getHasSetReportRelation = (params:any) => {
+  return request('/costAccount/reportForm/getRelationList', {
+    method: 'GET',
+    params: {...params},
+  });
+}
+
+//保存对应设置
+export const saveReportRelation = (body:any) => {
+  return request('/costAccount/reportForm/saveReportRelation', {
+    method: 'POST',
+    data: {...body},
+  });
+}
+
+//复制数据
+export const copyDataToSelectedType = (body:any) => {
+  return request('/costAccount/reportForm/copyReport', {
+    method: 'POST',
+    data: {...body},
+  });
+}
+
+//获取执行责任中心
+export const getResponsibleCenters = (reportType:string) => {
+  return request('/costAccount/costdepartmentprofit/getProfitResponsibility', {
+    method: 'GET',
+    params:{reportType}
+  });
+}
+
+
+//获取报表数据
+export const getReportDataReq = (reportType:string,computeDate:string) => {
+  return request('/costAccount/costdepartmentprofit/computeProfitReport', {
+    method: 'GET',
+    params:{reportType,computeDate}
+  });
+}
+
+//损益计算
+
+export const computeProfitReq = (computeDate:string,reportType:string) => {
+  return request('/costAccount/costdepartmentprofit/computeProfit', {
+    method: 'POST',
+    params: {computeDate,reportType},
+  });
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 200 - 0
src/pages/departmentCostCheck/style.less

@@ -0,0 +1,200 @@
+.drawerTable {
+  .header {
+    display: flex;
+    width: 100%;
+    flex-direction: row;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 16px;
+
+    .title {
+      font-weight: 500;
+      font-size: 16px;
+      color: #17181A;
+    }
+
+    .btns {
+      span {
+        display: inline-block;
+        cursor: pointer;
+        padding: 0 14px;
+        height: 24px;
+        line-height: 24px;
+        background: #FAFCFF;
+        border-radius: 4px;
+        font-weight: 400;
+        font-size: 14px;
+        color: #17181A;
+        border: 1px solid #DAE2F2;
+
+        &.close {
+          color: #fff;
+          background: #3377FF;
+          margin-left: 8px;
+        }
+      }
+    }
+  }
+}
+
+.DepartmentCostCalc {
+  background: #FFFFFF;
+  border-radius: 4px;
+
+  .header {
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+    align-items: center;
+    border-radius: 4px;
+    padding: 16px;
+    background-color: #fff;
+    border-bottom: 16px solid #F7F9FC;
+
+    .btnGoup {
+      &>span {
+        cursor: pointer;
+        display: inline-block;
+        color: #17181A;
+        line-height: 24px;
+        padding: 0 14px;
+        border-radius: 4px;
+        border: 1px solid #DAE2F2;
+        background: #FAFCFF;
+        margin-right: 8px;
+        font-weight: 400;
+        font-size: 14px;
+        color: #17181A;
+
+        &.onekeyCalcBtn {
+          color: #fff;
+          background: #3377FF;
+        }
+      }
+    }
+  }
+
+  .content {
+    padding: 16px;
+    padding-top: 0;
+
+    .inner {
+      display: flex;
+      width: 100%;
+      flex-direction: row;
+      justify-content: flex-start;
+      align-items: flex-start;
+
+      .left {
+        width: 220px;
+        height: calc(100vh - 223px);
+
+        border-radius: 4px;
+        padding-top: 8px;
+        margin-right: 16px;
+        border: 1px solid #DAE2F2;
+
+      }
+
+      .right {
+        width: calc(100% - 236px);
+
+        .toolBar {
+          display: flex;
+          flex-direction: row;
+          justify-content: space-between;
+          align-items: center;
+          margin-bottom: 12px;
+
+          .filterItem {
+            display: flex;
+            flex-direction: row;
+            justify-content:flex-start;
+            align-items: center;
+          }
+
+          .back {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            font-weight: 500;
+            font-size: 16px;
+            color: #17181A;
+            cursor: pointer;
+
+            &>span {
+              display:inline-flex;
+              justify-content: center;
+              align-items: center;
+              width: 24px;
+              height: 24px;
+              background: #FAFCFF;
+              border-radius: 4px;
+              margin-right: 8px;
+              border: 1px solid #DAE2F2;
+
+            }
+          }
+
+          .btnGroup {
+            &>span {
+              cursor: pointer;
+              display: inline-block;
+              color: #17181A;
+              line-height: 24px;
+              padding: 0 14px;
+              border-radius: 4px;
+              border: 1px solid #DAE2F2;
+              background: #FAFCFF;
+              margin-right: 8px;
+              font-weight: 400;
+              font-size: 14px;
+              color: #17181A;
+
+              &.calc {
+                color: #fff;
+                background: #3377FF;
+                border: none;
+              }
+            }
+          }
+        }
+
+        .KCIMTable {
+          .hover-row {
+            .hover-icon {
+              visibility: hidden;
+            }
+
+            &:hover {
+              .hover-icon {
+                visibility: visible;
+              }
+            }
+          }
+
+          .cost-ant-table-header {
+            .cost-ant-table-thead {
+              .cost-ant-table-cell {}
+            }
+          }
+
+          .cost-ant-table-body {
+            .cost-ant-table-row {
+              &.has-children {
+                td {
+                  border-right: none !important;
+                }
+
+                .cost-ant-table-cell-with-append {
+                  font-weight: bold;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+}

+ 1057 - 0
src/pages/departmentMenzhuCostCalc/index.tsx

@@ -0,0 +1,1057 @@
+/*
+ * @Author: code4eat awesomedema@gmail.com
+ * @Date: 2023-03-03 11:30:33
+ * @LastEditors: code4eat awesomedema@gmail.com
+ * @LastEditTime: 2024-12-06 17:06:53
+ * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+
+import KCIMPagecontainer from '@/components/KCIMPageContainer';
+import { KCIMTable } from '@/components/KCIMTable';
+
+import { createFromIconfontCN } from '@ant-design/icons';
+
+
+import { ActionType, ProFormInstance } from '@ant-design/pro-components';
+
+import { ProColumns } from '@ant-design/pro-table';
+import { Modal, message, Tabs, Input, DatePicker, Popover, Alert } from 'antd';
+import { Key, useEffect, useRef, useState } from 'react';
+import * as XLSX from 'xlsx';
+import { saveAs } from 'file-saver';
+import moment from 'moment';
+import 'moment/locale/zh-cn';
+import locale from 'antd/es/date-picker/locale/zh_CN';
+
+
+
+import { computeProfitReq, getReportProjectSettingList, getResponsibleCenters } from './service';
+
+import './style.less';
+import React from 'react';
+
+import { getDicDataBySysId } from '@/services/getDic';
+import { KCIMLeftList } from '@/components/KCIMLeftList';
+import { formatMoneyNumber } from '@/utils/format';
+import { useModel } from '@umijs/max';
+import { getUserHasReports } from '../costAccounting/calcPageTemplate/service';
+
+
+
+const IconFont = createFromIconfontCN({
+    scriptUrl: '',
+});
+
+let currentRow: any = undefined;
+
+function findAllParents(tree: any[]) {
+    let parents: any[] = [];
+    // 递归函数来遍历树并找到所有父节点
+    function traverse(nodes: any[]) {
+        for (const node of nodes) {
+            // 检查节点是否有子节点
+            if (node.children && node.children.length > 0) {
+                parents.push(node); // 添加到父节点列表
+                traverse(node.children); // 递归遍历子节点
+            }
+        }
+    }
+
+    traverse(tree); // 开始遍历树
+    return parents; // 返回所有父节点的数组
+}
+
+function countLeafNodes(trees: any[]) {
+    let leafCount = 0;
+
+    // 遍历集合中的每棵树
+    for (let i = 0; i < trees.length; i++) {
+        leafCount += countLeafNodesRecursive(trees[i]);
+    }
+
+    return leafCount;
+}
+
+function countLeafNodesRecursive(node: any) {
+    // 如果当前节点没有子节点,说明它是一个叶子节点
+    if (!node.children || node.children.length === 0) {
+        return 1;
+    }
+
+    let leafCount = 0;
+
+    // 递归计算每个子节点的叶子节点数
+    for (let i = 0; i < node.children.length; i++) {
+        leafCount += countLeafNodesRecursive(node.children[i]);
+    }
+
+    return leafCount;
+}
+
+
+function searchTree(tree: any[], searchTerm: string) {
+    // 定义结果数组
+    let results = [];
+
+    // 定义递归函数来搜索匹配的节点
+    function searchNode(node: any) {
+        // 创建一个变量来标记当前节点或其子节点是否匹配
+        let isMatch = false;
+
+        // 检查当前节点的 name 或 code 是否包含搜索词
+        if (node.reportName.includes(searchTerm)) {
+            isMatch = true;
+        }
+
+        // 复制当前节点,避免修改原始数据
+        let newNode = { ...node, children: [] };
+
+        // 如果有子节点,递归搜索每个子节点
+        if (node.children) {
+            for (let child of node.children) {
+                let childMatch = searchNode(child);
+                // 如果子节点或其子树匹配,添加到新节点的子节点数组中
+                if (childMatch) {
+                    newNode.children.push(childMatch);
+                    isMatch = true;
+                }
+            }
+        }
+
+        // 如果当前节点或其任何子节点匹配,返回新节点
+        // 如果children为空,则不包含children属性
+        if (isMatch) {
+            if (newNode.children.length === 0) {
+                delete newNode.children;
+            }
+            return newNode;
+        } else {
+            return null;
+        }
+    }
+
+    // 遍历树的每个顶级节点
+    for (let node of tree) {
+        let result = searchNode(node);
+        if (result) {
+            results.push(result);
+        }
+    }
+
+    return results;
+}
+
+function processTree(originalData: any[]) {
+    return originalData.map(node => {
+        // 深复制当前节点
+        const newNode = JSON.parse(JSON.stringify(node));
+
+        // 如果当前节点有profitList,处理它
+        if (newNode.profitList && Array.isArray(newNode.profitList)) {
+            newNode.profitList.forEach((profit: any) => {
+                // 添加新的键值对到新节点
+                newNode[`${profit.reportId}`] = formatMoneyNumber(profit.value);
+            });
+            // 如果不需要保留profitList,可以删除
+            // delete newNode.profitList;
+        }
+
+        // 如果节点有子节点,递归处理子节点
+        if (node.child && Array.isArray(node.child)) {
+            newNode.children = processTree(node.child);
+        }
+
+        return newNode;
+    });
+}
+
+// 递归函数,用于处理多层级标题
+function generateColumns(item: any, titleIndex = 0) {
+    const column: any = {
+        title: item.reportName,
+        dataIndex: `${item.reportId}`,
+        key: `${item.reportId}`,
+        // align: item.reportName != ''?'center':'',
+
+    };
+
+    if (item.childTitle && Array.isArray(item.childTitle) && item.childTitle.length > 0) {
+        column.children = item.childTitle.map((a: any, aindex: number) => generateColumns(a, titleIndex + 1));
+    }
+
+    return column;
+}
+
+
+
+// 主函数,生成表格列
+const generateTableColumns = (title: any[]) => {
+    return title.map((item: any, titleIndex: number) => generateColumns(item, titleIndex));
+};
+
+
+
+// 数据转换函数
+const transformData = (data: any[]) => {
+    const resultMap: Map<string, { reportName: string; key: string; children?: any[];[key: string]: any }> = new Map();
+
+    // 转换单个条目
+    const transformEntry = (entry: any, type: string) => {
+        if (!entry) return {};
+        const transformedEntry = { ...entry };
+        transformedEntry[`${type}_currentAmount`] = entry.currentAmount != null ? formatMoneyNumber(entry.currentAmount) : null;
+        transformedEntry[`${type}_preMonthAmount`] = entry.preMonthAmount != null ? formatMoneyNumber(entry.preMonthAmount) : null;
+        transformedEntry[`${type}_preYearAmount`] = entry.preYearAmount != null ? formatMoneyNumber(entry.preYearAmount) : null;
+        transformedEntry[`${type}_preMonthPercent`] = entry.preMonthPercent != null ? entry.preMonthPercent : null;
+        transformedEntry[`${type}_preYearPercent`] = entry.preYearPercent != null ? entry.preYearPercent : null;
+        return transformedEntry;
+    };
+
+    // 合并新的条目到现有条目,不覆盖已有的字段
+    const mergeEntries = (existingEntry: any, newEntry: any) => {
+        for (const key in newEntry) {
+            if (!existingEntry[key] || key.endsWith('_currentAmount') || key.endsWith('_preMonthAmount') || key.endsWith('_preYearAmount') || key.endsWith('_preMonthPercent') || key.endsWith('_preYearPercent')) {
+                existingEntry[key] = newEntry[key];
+            }
+        }
+    };
+
+    // 递归处理每个节点及其子节点
+    const processNode = (node: any, type: string): any => {
+        if (!node) return {};
+
+        const transformedNode = transformEntry(node, type);
+
+        if (node.children && Array.isArray(node.children)) {
+            const processedChildren = node.children.map((child: any) => processNode(child, type));
+            transformedNode.children = mergeChildren(transformedNode.children || [], processedChildren);
+        }
+
+        return transformedNode;
+    };
+
+    // 合并子节点,确保同一个父节点下的子节点是唯一的
+    const mergeChildren = (existingChildren: any[], newChildren: any[]) => {
+        newChildren.forEach((newChild) => {
+            const existingChild = existingChildren.find((child) => child.reportName === newChild.reportName && child.key === newChild.key);
+
+            if (existingChild) {
+                mergeEntries(existingChild, newChild);
+                if (newChild.children && Array.isArray(newChild.children)) {
+                    existingChild.children = mergeChildren(existingChild.children || [], newChild.children);
+                }
+            } else {
+                existingChildren.push(newChild);
+            }
+        });
+
+        return existingChildren;
+    };
+
+    // 主处理逻辑
+    data.forEach((item) => {
+        const { medicalType, data } = item;
+
+        if (!data || !Array.isArray(data)) {
+            return;
+        }
+
+        data.forEach((profit) => {
+            if (!resultMap.has(profit.reportName)) {
+                resultMap.set(profit.reportName, {
+                    ...transformEntry(profit, medicalType),
+                    key: profit.reportName,
+                });
+            }
+
+            const existingEntry = resultMap.get(profit.reportName)!;
+            const transformedProfit = processNode(profit, medicalType);
+
+            mergeEntries(existingEntry, transformedProfit);
+
+            if (transformedProfit.children && Array.isArray(transformedProfit.children)) {
+                existingEntry.children = mergeChildren(existingEntry.children || [], transformedProfit.children);
+            }
+        });
+    });
+
+    // 确保每个层级的数据都有完整的月份字段
+    const fillMissingMonths = (nodes: any[], medicalTypes: string[]) => {
+        nodes.forEach((node) => {
+            medicalTypes.forEach((type) => {
+                if (!node.hasOwnProperty(`${type}_currentAmount`)) {
+                    node[`${type}_currentAmount`] = node.currentAmount != null ? formatMoneyNumber(node.currentAmount) : null;
+                }
+                if (!node.hasOwnProperty(`${type}_preMonthAmount`)) {
+                    node[`${type}_preMonthAmount`] = node.preMonthAmount != null ? formatMoneyNumber(node.preMonthAmount) : null;
+                }
+                if (!node.hasOwnProperty(`${type}_preYearAmount`)) {
+                    node[`${type}_preYearAmount`] = node.preYearAmount != null ? formatMoneyNumber(node.preYearAmount) : null;
+                }
+
+                if (!node.hasOwnProperty(`${type}_preMonthPercent`)) {
+                    node[`${type}_preMonthPercent`] = node.preMonthPercent ? node.preMonthPercent : null;
+                }
+                if (!node.hasOwnProperty(`${type}_preYearPercent`)) {
+                    node[`${type}_preYearPercent`] = node.preYearPercent ? node.preYearPercent : null;
+                }
+            });
+
+            if (node.children && Array.isArray(node.children)) {
+                fillMissingMonths(node.children, medicalTypes);
+                if (node.children.length === 0) {
+                    delete node.children;
+                }
+            }
+        });
+    };
+
+    const medicalTypes = data.map((item) => item.medicalType);
+
+
+    const transformedData = Array.from(resultMap.values());
+
+    fillMissingMonths(transformedData, medicalTypes);
+
+    transformedData.forEach((node) => {
+        if (node.children && node.children.length === 0) {
+            delete node.children;
+        }
+    });
+
+
+    return transformedData;
+};
+
+
+const getNextUnexpandedKeys = (data: any[], expandedKeys: any[] = []) => {
+    let keys: any[] = [];
+
+    const traverse = (nodes: any) => {
+        for (const node of nodes) {
+            // 如果当前节点还没有展开,就把它加入 keys
+            if (!expandedKeys.includes(node.id)) {
+                keys.push(node.id);
+            }
+
+            // 如果当前节点已经展开,继续遍历子节点
+            if (node.children && expandedKeys.includes(node.id)) {
+                traverse(node.children);
+            }
+        }
+    };
+
+    traverse(data);
+
+    return keys;
+};
+
+
+export default function DepartmentCostCalc() {
+
+    const [tableDataFilterParams, set_tableDataFilterParams] = useState<any | undefined>({ reportType: 0 });
+    const tableRef = useRef<ActionType>();
+    const [tabs, set_tabs] = useState<any[]>([]);
+
+    const { initialState, setInitialState } = useModel('@@initialState');
+    const [computeDate, set_computeDate] = useState<string>(initialState ? initialState.computeDate : '');
+    const [responsibleCenters, set_responsibleCenters] = useState<any[]>([]);
+    const [currentTabKey, set_currentTabKey] = useState<any | undefined>(undefined);
+    const [currentTab, set_currentTab] = useState<any | undefined>(undefined);
+    const [currentSelectedRespon, set_currentSelectedRespon] = useState<any | undefined>(undefined);
+    const [tableDataSearchKeywords, set_tableDataSearchKeywords] = useState('');
+    const [allParentsKeys, set_allParentsKeys] = useState<Key[]>([]);
+
+    const [dataSource, set_dataSource] = useState<any[]>([]);
+    const [calcResultText, set_calcResultText] = useState<undefined | string>(undefined);
+    const [nextLevel, set_nextLevel] = useState<any>(undefined);
+
+    const [columns, set_columns] = useState<any[]>([]);
+
+
+    // 动态生成列定义函数
+    const generateDataColumns = (colData: any[]) => {
+        const baseColumns: any[] = [
+            {
+                title: '报表项目名称',
+                dataIndex: 'reportName',
+                key: 'reportName',
+                width: 200,
+                fixed: 'left',
+            },
+        ];
+
+        colData.forEach((data) => {
+            const medicalTypeTitle = data.medicalType === 1 ? '门诊' : data.medicalType === 2 ? '住院' : '总计';
+
+            baseColumns.push(
+                {
+                    title: medicalTypeTitle,
+                    dataIndex: '1',
+                    children: [
+                        {
+                            title: '本期',
+                            dataIndex: `${data.medicalType}_currentAmount`, // This is used for the main title
+                            key: `${data.medicalType}_currentAmount`,
+                            align:'right',
+                            render: (num: number, record: { calcType: any; }) => {
+                                const { calcType } = record;
+                                return calcType === 0 ? <React.Fragment></React.Fragment> : formatMoneyNumber(num);
+                            },
+                        },
+                        {
+                            title: '上期',
+                            align:'right',
+                            dataIndex: `${data.medicalType}_preMonthAmount`,
+                            key: `${data.medicalType}_preMonthAmount`,
+                            render: (num: number, record: { calcType: any; }) => {
+                                const { calcType } = record;
+                                return calcType === 0 ? <React.Fragment></React.Fragment> : formatMoneyNumber(num);
+                            },
+                        },
+                        {
+                            title: '环比增长率',
+                            align:'right',
+                            dataIndex: `${data.medicalType}_preMonthPercent`,
+                            key: `${data.medicalType}_preMonthPercent`,
+                            renderText(text: string, record: any) {
+
+                                const { calcType } = record;
+                                if (calcType == 0) {
+                                    return <React.Fragment></React.Fragment>
+                                } else {
+                                    const isNegative = text?text.startsWith('-') && text.includes('%'):false;
+                                    return isNegative?<span style={{color:'#00BF8F'}}>{text}</span>:text
+                              }
+                            },
+                        },
+                        {
+                            title: '同期',
+                            align:'right',
+                            dataIndex: `${data.medicalType}_preYearAmount`,
+                            key: `${data.medicalType}_preYearAmount`,
+                            render: (num: number, record: { calcType: any; }) => {
+                                const { calcType } = record;
+                                return calcType === 0 ? <React.Fragment></React.Fragment> : formatMoneyNumber(num);
+                            },
+                        },
+                        {
+                            title: '同比增长率',
+                            align:'right',
+                            dataIndex: `${data.medicalType}_preYearPercent`,
+                            key: `${data.medicalType}_preYearPercent`,
+                            renderText(text: string, record: any) {
+
+                                const { calcType } = record;
+                                if (calcType == 0) {
+                                    return <React.Fragment></React.Fragment>
+                                } else {
+                                    const isNegative = text?text.startsWith('-') && text.includes('%'):false;
+                                    return isNegative?<span style={{color:'#00BF8F'}}>{text}</span>:text
+                                }
+
+                            },
+                        }
+                    ]
+                }
+            );
+        });
+
+        return baseColumns;
+    };
+
+
+
+
+    const getTableData = async (params: any) => {
+        const { responsibilityCode, filter = undefined } = params;
+
+        if (!responsibilityCode) return []
+
+        if (!nextLevel) {
+
+            const resp = await getReportProjectSettingList({ ...params });
+            if (resp) {
+                // if (filter) {
+                //     const filterData = searchTree(resp, filter);
+                //     const allParents = findAllParents(filterData);
+
+                //     set_allParentsKeys([...(allParents.map((a: any) => a.id))])
+                //     return {
+                //         data: filterData,
+                //         success: true,
+                //     }
+                // }
+
+                const realData = transformData(resp);
+                if (currentTab.value == '1') {
+                    const allParents = findAllParents(realData);
+
+                    set_allParentsKeys([...(allParents.map((a: any) => a.id))]);
+                }
+
+                set_columns(generateDataColumns(resp));
+                set_dataSource(realData);
+                return {
+                    data: realData,
+                    success: true,
+                }
+            } else {
+                set_columns(generateDataColumns([]));
+                set_dataSource([]);
+                return {
+                    data: [],
+                    success: true,
+                }
+            }
+        }
+
+        // if (nextLevel) {
+        //     const { reportId, calcType, date } = nextLevel;
+
+        //     if (calcType == 1) {
+        //         set_columns([
+        //             {
+        //                 title: '会计科目代码',
+        //                 dataIndex: 'accountCode',
+        //                 key: 'accountCode',
+        //             },
+        //             {
+        //                 title: '会计项目名称',
+        //                 dataIndex: 'accountName',
+        //                 key: 'accountName',
+        //             },
+        //             {
+        //                 title: '金额',
+        //                 dataIndex: 'amount',
+        //                 key: 'amount',
+        //                 renderText(num: number, record: any) {
+        //                     return formatMoneyNumber(num)
+        //                 }
+        //             }
+        //         ])
+        //         // const resp = await getNextLevelTableData({
+        //         //     computeDate: date,
+        //         //     reportId,
+        //         //     reportType: currentTabKey,
+        //         //     responsibilityCode: currentSelectedRespon.responsibilityCode
+        //         // });
+
+        //         // return {
+        //         //     data: resp ? resp : [],
+        //         //     success: true,
+        //         // }
+        //     }
+        //     if (calcType == 2 || calcType == 5) {
+        //         const columns = [
+        //             {
+        //                 title: () => <React.Fragment></React.Fragment>,
+        //                 key: 'empty',
+        //                 children: [
+        //                     {
+        //                         title: '责任中心',
+        //                         dataIndex: 'responsibilityCenter',
+        //                         key: 'responsibilityCenter',
+        //                         render: (text: any, row: { responsibilityCenterRowSpan: any; }) => {
+        //                             return {
+        //                                 children: text,
+        //                                 props: {
+        //                                     rowSpan: row.responsibilityCenterRowSpan,
+        //                                 },
+        //                             };
+        //                         },
+        //                     },
+        //                     {
+        //                         title: '项目名称',
+        //                         dataIndex: 'projectName',
+        //                         key: 'projectName',
+        //                         render: (text: any, row: { projectNameRowSpan: any; }) => {
+        //                             return {
+        //                                 children: text,
+        //                                 props: {
+        //                                     rowSpan: row.projectNameRowSpan,
+        //                                 },
+        //                             };
+        //                         },
+        //                     },
+        //                     {
+        //                         title: '分摊参数',
+        //                         dataIndex: 'shareParam',
+        //                         key: 'shareParam',
+        //                     },
+        //                       {
+        //                         title: '分摊金额',
+        //                         dataIndex: 'shareAmount',
+        //                         key: 'shareAmount',
+        //                       },
+        //                 ]
+        //             },
+        //             {
+        //                 title: `${currentSelectedRespon.responsibilityName}`,
+        //                 dataIndex: `${currentSelectedRespon.responsibilityCode}`,
+        //                 key: `${currentSelectedRespon.responsibilityCode}`,
+        //                 children: [
+        //                     {
+        //                         title: '分摊参数数值',
+        //                         dataIndex: 'shareParamValue',
+        //                         key: 'shareParamValue',
+        //                     },
+        //                     {
+        //                         title: '分摊参数占比',
+        //                         dataIndex: 'shareParamRate',
+        //                         key: 'shareParamRate',
+        //                     },
+        //                     {
+        //                         title: '金额',
+        //                         dataIndex: 'amount',
+        //                         key: 'amount',
+        //                     },
+        //                 ]
+        //             }
+        //         ];
+        //         set_columns([...columns]);
+        //         const resp = await getNextLevelTableData({
+        //             computeDate: date,
+        //             reportId,
+        //             reportType: currentTabKey,
+        //             responsibilityCode: currentSelectedRespon.responsibilityCode
+        //         });
+
+        //         const processData = (data: any[]) => {
+        //             const rows: any[] = [];
+        //             data.forEach((item, index) => {
+        //                 let responseNameRowSpan = 0; // 合并相同责任中心的单元格
+        //                 item.dataList.forEach((dataItem: any) => {
+        //                     responseNameRowSpan += dataItem.shareParamData.length; // 计算需要合并的行数
+        //                 });
+
+        //                 let currentRow = 0; // 当前行位置
+        //                 item.dataList.forEach((dataItem: any) => {
+        //                     const dataItemRowSpan = dataItem.shareParamData.length; // 项目名称的行合并数
+        //                     dataItem.shareParamData.forEach((param: any, paramIndex: number) => {
+        //                         rows.push({
+        //                             key: `${item.responseCode}-${dataItem.alias}-${param.shareParamCode}`,
+        //                             responsibilityCenter: paramIndex === 0 && currentRow === 0 ? item.responseName : '',
+        //                             responsibilityCenterRowSpan: paramIndex === 0 && currentRow === 0 ? responseNameRowSpan : 0,
+        //                             projectName: paramIndex === 0 ? dataItem.alias : '',
+        //                             projectNameRowSpan: paramIndex === 0 ? dataItemRowSpan : 0,
+        //                             shareParam: param.shareParamName,
+        //                             shareAmount: formatMoneyNumber(param.shareParamAmount),
+        //                             shareParamValue: param.shareParamNum,
+        //                             shareParamRate: param.shareParamRate.toFixed(6),
+        //                             amount: formatMoneyNumber(param.shareParamValue),
+        //                         });
+        //                     });
+        //                     currentRow++;
+        //                 });
+        //             });
+        //             return rows;
+        //         };
+
+        //         return {
+        //             data: resp ? processData(resp) : [],
+        //             success: true,
+        //         }
+        //     }
+
+        // }
+
+        return []
+    }
+
+
+
+
+    const onTabChanged = (key: Key) => {
+        set_currentTabKey(key);
+        const needItem = tabs.filter((a) => a.key == key);
+        if (needItem.length > 0) set_currentTab(needItem[0])
+    }
+
+    const getTabs = async () => {
+
+        // const { systemId } = JSON.parse((localStorage.getItem('currentSelectedTab')) as string)
+        // const resp = await getDicDataBySysId(systemId, 'PROFIT_REPORT_TYPE');
+        const resp = await getUserHasReports();
+        if (resp) {
+            const { dataVoList } = resp;
+            const tempArr = dataVoList.map((a: any) => ({ label:`${a.name}`, key: Number(a.code), value: a.value }));
+            const arr = (tempArr.filter((a: any) => a.value != '2'));
+            set_tabs([...arr]);
+            set_currentTabKey(arr[0].key);
+            set_currentTab(arr[0]);
+        }
+    }
+
+    const computeProfitHandle = async () => {
+
+        Modal.confirm({
+            title: '注意',
+            content: '计算操作会覆盖当月已计算的数据,是否继续操作?',
+            okText: '确定',
+            cancelText: '取消',
+            onOk: async (...args) => {
+                const resp = await computeProfitReq(computeDate, currentTabKey);
+                if (resp) {
+                    message.success('操作成功!');
+                    set_calcResultText('计算成功!');
+                    getResponsibleCenterList(currentTabKey, computeDate)
+                } else {
+                    set_calcResultText('计算失败!');
+                }
+            },
+        })
+    }
+
+    const getResponsibleCenterList = async (reportType: string, computeDate: string) => {
+        const resp = await getResponsibleCenters(reportType, computeDate);
+        if (resp) {
+            set_responsibleCenters(resp);
+        } else {
+            set_columns(generateDataColumns([]));
+            set_dataSource([]);
+            set_responsibleCenters([]);
+            set_tableDataFilterParams({
+                ...tableDataFilterParams,
+                responsibilityCode:undefined,
+                responsibilityType:undefined,
+                
+            })
+        }
+    }
+
+    const onLeftChange = (currentSelected: any) => {
+        set_currentSelectedRespon(currentSelected);
+    }
+
+    const backToHandle = () => {
+        set_nextLevel(undefined);
+        tableRef.current?.reload();
+    }
+
+    const tableDataSearchHandle = (paramName: string) => {
+
+        set_tableDataFilterParams({
+            ...tableDataFilterParams,
+            [`${paramName}`]: tableDataSearchKeywords
+        })
+    }
+
+
+    const getHeaderRows = (columns: any[], level = 0, headerRows: any[] = [], maxLevel = 0) => {
+        headerRows[level] = headerRows[level] || [];
+        columns.forEach((col: { title: any; children: any; }) => {
+            const colSpan = getColSpan(col);
+            headerRows[level].push({ title: col.title, colSpan, rowSpan: col.children ? 1 : maxLevel - level });
+            if (col.children) {
+                getHeaderRows(col.children, level + 1, headerRows, maxLevel);
+            } else {
+                // 填充空白单元格
+                for (let i = level + 1; i < maxLevel; i++) {
+                    headerRows[i] = headerRows[i] || [];
+                    headerRows[i].push({ title: '', colSpan: 1, rowSpan: 1 });
+                }
+            }
+        });
+        return headerRows;
+    };
+
+    const getColSpan: any = (col: { children: any[]; }) => {
+        if (!col.children) return 1;
+        return col.children.reduce((sum, child) => sum + getColSpan(child), 0);
+    };
+
+    const getMaxLevel = (col: any) => {
+        if (!col.children) return 1;
+        return 1 + Math.max(...col.children.map(getMaxLevel));
+    };
+
+    const extractLeafColumns = (columns: any[]) => {
+        let leafColumns: any[] = [];
+        columns.forEach(col => {
+            if (col.children) {
+                leafColumns = leafColumns.concat(extractLeafColumns(col.children));
+            } else {
+                leafColumns.push(col);
+            }
+        });
+        return leafColumns;
+    };
+
+    const addRowWithIndentation = (record: any, level: number, leafColumns: any[], worksheetData: any[]) => {
+        const row = leafColumns.map(col => record[col.dataIndex] ?? '');
+        row[0] = ' '.repeat(level * 4) + row[0]; // 在第一列前添加缩进空格以表示层级
+        worksheetData.push(row);
+        if (record.children) {
+            record.children.forEach((child: any) => addRowWithIndentation(child, level + 1, leafColumns, worksheetData));
+        }
+    };
+
+    const handleExport = () => {
+        try {
+            const workbook = XLSX.utils.book_new();
+            const worksheetData: any[] = [];
+
+            // 获取最大层级
+            const maxLevel = columns.reduce((max, col) => Math.max(max, getMaxLevel(col)), 0);
+
+            // 生成多层级表头
+            const headerRows = getHeaderRows(columns, 0, [], maxLevel);
+
+            // 构建表头行
+            headerRows.forEach((row: any, rowIndex) => {
+                const rowData: string[] = [];
+                row.forEach((cell: { title: any; colSpan: number; rowSpan: number; }) => {
+                    rowData.push(cell.title);
+                    for (let i = 1; i < cell.colSpan; i++) {
+                        rowData.push('');
+                    }
+                });
+                worksheetData.push(rowData);
+            });
+
+            // 填充单层表头的空白行
+            if (maxLevel > 1) {
+                const numColumns = headerRows[0].reduce((sum: any, cell: { colSpan: any; }) => sum + cell.colSpan, 0);
+                for (let i = 1; i < maxLevel; i++) {
+                    while (worksheetData[i].length < numColumns) {
+                        worksheetData[i].push('');
+                    }
+                }
+            }
+
+            // 提取最内层表头列
+            const leafColumns = extractLeafColumns(columns);
+
+            // 添加数据并处理树结构
+            dataSource.forEach(record => addRowWithIndentation(record, 0, leafColumns, worksheetData));
+
+            const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);
+
+            // 初始化合并单元格数组
+            worksheet['!merges'] = worksheet['!merges'] || [];
+
+            // 合并单元格
+            headerRows.forEach((row: any, rowIndex) => {
+                let colIndex = 0;
+                row.forEach((cell: { colSpan: number; rowSpan: number; }) => {
+                    if (cell.colSpan > 1 || cell.rowSpan > 1) {
+                        worksheet['!merges']!.push({  // 使用非空断言 '!'
+                            s: { r: rowIndex, c: colIndex },
+                            e: { r: rowIndex + cell.rowSpan - 1, c: colIndex + cell.colSpan - 1 }
+                        });
+                    }
+                    colIndex += cell.colSpan;
+                });
+            });
+
+            // 设置单元格对齐方式
+            Object.keys(worksheet).forEach(cell => {
+                if (cell[0] !== '!') {
+                    worksheet[cell].s = {
+                        alignment: { vertical: 'center', horizontal: 'center' }
+                    };
+                }
+            });
+
+            XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+
+            const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' });
+            const s2ab = (s: string) => {
+                const buf = new ArrayBuffer(s.length);
+                const view = new Uint8Array(buf);
+                for (let i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF;
+                return buf;
+            };
+
+            saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), currentTab ? `${currentTab.label}.xlsx` : 'table_data.xlsx');
+        } catch (error) {
+            console.error('Export failed:', error);
+        }
+    };
+
+
+    const onekeyComputeProfitHandle = async () => {
+        Modal.confirm({
+            title: '注意',
+            content: '一键计算操作会覆盖当月已计算的数据,是否继续操作?',
+            okText: '确定',
+            cancelText: '取消',
+            onOk: async () => {
+                try {
+                    const promises = tabs.map(tab => computeProfitReq(computeDate, tab.key));  // 对每个tab创建一个请求
+                    const results = await Promise.all(promises);  // 等待所有请求完成
+
+                    const allSuccess = results.every(resp => resp);  // 检查所有请求是否都成功
+                    if (allSuccess) {
+                        message.success('操作成功!');
+                        set_calcResultText('一键计算成功!');
+                    } else {
+                        set_calcResultText('一键计算部分失败!');
+                    }
+
+                    tableRef.current?.reload();  // 重新加载表格数据
+                } catch (error) {
+                    message.error('操作失败,请重试!');
+                    set_calcResultText('一键计算失败!');
+                }
+            },
+        });
+    };
+
+    const handleCollapseAll = () => {
+        set_allParentsKeys([]);
+    };
+
+    const handleExpandNext = () => {
+        // 当前所有未展开的节点,第一层优先展开
+        const keysToExpand = getNextUnexpandedKeys(dataSource, allParentsKeys);
+        set_allParentsKeys((prev) => Array.from(new Set([...prev, ...keysToExpand])));
+    };
+
+
+    useEffect(() => {
+        set_currentSelectedRespon(undefined);
+        if (computeDate && currentTabKey != undefined) {
+            getResponsibleCenterList(currentTabKey, computeDate);
+            // set_tableDataFilterParams({
+            //     ...tableDataFilterParams,
+            //     currentTabKey,
+            //     computeDate
+            // });
+            set_nextLevel(undefined);
+        }
+        set_allParentsKeys([]);
+    }, [computeDate, currentTabKey]);
+
+    useEffect(() => {
+
+        if (currentSelectedRespon) {
+
+            set_tableDataFilterParams({
+                ...tableDataFilterParams,
+                responsibilityCode: currentSelectedRespon.responsibilityCode,
+                reportType: currentTabKey,
+                responsibilityType: currentSelectedRespon.responsibilityType,
+                computeDate
+
+            });
+            set_nextLevel(undefined);
+        }
+        set_allParentsKeys([]);
+    }, [currentSelectedRespon]);
+
+
+    useEffect(() => {
+        getTabs();
+    }, [])
+
+    return (
+        <KCIMPagecontainer className='DepartmentCostCalc' title={false}>
+            <div className='header'>
+                <div className="search">
+                    <span>核算年月:</span>
+                    <DatePicker
+                        onChange={(data, dateString) => {
+                            // console.log({data,dateString});
+                            set_computeDate(dateString);
+                            setInitialState((s: any) => ({ ...s, computeDate: dateString, }))
+                            // set_tableDataFilterParams({
+                            //     ...tableDataFilterParams,
+                            //     computeDate: dateString
+                            // });
+                        }}
+                        picker="month"
+                        locale={locale}
+                        autoComplete="off"
+                        defaultValue={moment(computeDate, 'YYYY-MM')}
+                        format="YYYY-MM"
+                    />
+                </div>
+                <div className='btnGoup'>
+                    <span className='onekeyCalcBtn' onClick={()=>onekeyComputeProfitHandle()}>一键计算</span>
+                </div>
+            </div>
+            <div className='content'>
+                <Tabs
+                    defaultActiveKey={tabs.length > 0 ? tabs[0].key : undefined}
+                    items={tabs}
+                    key={'key'}
+                    onChange={(key) => onTabChanged(key)}
+                />
+                {calcResultText && <Alert showIcon onClose={()=>set_calcResultText(undefined)} icon={<IconFont type={(calcResultText.indexOf('失败') != -1) ? 'icon-cuowutishi' : 'icon-chenggongtishi'} />} closable style={{ padding: '4px 12px', marginBottom: 16, borderRadius: 4, border: (calcResultText.indexOf('失败') != -1) ? '1px solid #73E6BF' : '', background: (calcResultText.indexOf('失败') != -1) ? '#FFF1F3' : '#EBFFF8' }} message={calcResultText} type={calcResultText.indexOf('失败') != -1 ? 'error' : 'success'} />}
+                <div className='inner'>
+                    <div className='left'>
+                        <KCIMLeftList
+                            fieldNames={{ title: 'responsibilityName', key: 'responsibilityCode', children: 'child' }}
+                            rowKey={'responsibilityCode'}
+                            dataSource={responsibleCenters} searchKey={'responsibilityName'}
+                            onChange={onLeftChange}
+                            contentH={`100%`}
+                            // placeholder={leftListSearchPlaceHolder} 
+                            listType={'tree'}
+
+                        />
+                    </div>
+                    <div className='right'>
+                        <div className='toolBar'>
+                            <div className='filterItem' style={{ width: 228 }}>
+                                {/* <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
+                                <Input placeholder={'报表项目代码/名称'} allowClear autoComplete='off'
+                                    suffix={
+                                        <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
+                                    }
+                                    onChange={(e) => {
+                                        set_tableDataSearchKeywords(e.target.value);
+                                        if (e.target.value.length == 0) {
+                                            set_tableDataFilterParams({
+                                                ...tableDataFilterParams,
+                                                filter: ''
+                                            });
+                                        }
+                                    }}
+                                    onPressEnter={(e) => {
+                                        set_tableDataFilterParams({
+                                            ...tableDataFilterParams,
+                                            filter: ((e.target) as HTMLInputElement).value
+                                        });
+                                    }}
+
+                                /> */}
+                                {nextLevel && <div className='back' onClick={() => backToHandle()}><span><IconFont type='iconfanhui' /></span>{nextLevel.reportName}</div>}
+                            </div>
+
+                            <div className='btnGroup'>
+                                {/* <span className='btn' onClick={() => openTableDataDrawer()}>报表数据</span> */}
+                                <span className='btn' onClick={() => handleCollapseAll()}>全部折叠</span>
+                                <span className='btn' style={{ marginRight: 16 }} onClick={() => handleExpandNext()}>展开下一层</span>
+                                <span className='calc' onClick={() => computeProfitHandle()}>计算</span>
+                            </div>
+                        </div>
+
+                        <KCIMTable pagination={false}
+                            bordered
+                            rowClassName={(record) => (record.children ? 'has-children hover-row' : 'hover-row')}
+                            expandable={{
+                                defaultExpandAllRows: true, expandedRowKeys: allParentsKeys,
+                                onExpand(expanded, record) {
+                                    const { id } = record;
+                                    if (!expanded) {
+                                        const expandedKeys = allParentsKeys.filter(a => a != id);
+                                        set_allParentsKeys([...expandedKeys]);
+                                    } else {
+                                        set_allParentsKeys([...allParentsKeys, id]);
+                                    }
+                                },
+                            }} columns={columns as ProColumns[]} scroll={{ y: `calc(100vh - 343px)`, x: ((columns.length - 1) * 710) + 220 }} actionRef={tableRef} rowKey='id' params={tableDataFilterParams} request={(params) => getTableData(params)} />
+                    </div>
+                </div>
+
+
+            </div>
+        </KCIMPagecontainer>
+    )
+}

+ 57 - 0
src/pages/departmentMenzhuCostCalc/service.ts

@@ -0,0 +1,57 @@
+/*
+ * @Author: code4eat awesomedema@gmail.com
+ * @Date: 2023-03-03 16:31:27
+ * @LastEditors: code4eat awesomedema@gmail.com
+ * @LastEditTime: 2024-09-27 15:05:45
+ * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/service.ts
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+
+import { Key } from 'react';
+import { request } from 'umi';
+
+//获取table列表数据
+export const getReportProjectSettingList = (params:any) => {
+  return request('/costAccount/costdepartmentprofit/getMedicalProfit', {
+    method: 'GET',
+    params:{...params},
+  });
+}
+
+
+
+//获取执行责任中心
+export const getResponsibleCenters = (reportType:string,computeDate:string) => {
+  return request('/costAccount/costdepartmentprofit/getMedicalResponsibility', {
+    method: 'GET',
+    params:{reportType,computeDate}
+  });
+}
+
+
+
+//损益计算
+
+export const computeProfitReq = (computeDate:string,reportType:string) => {
+  return request('/costAccount/costdepartmentprofit/calcMedicalProfit', {
+    method: 'POST',
+    params: {computeDate,reportType},
+  });
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 200 - 0
src/pages/departmentMenzhuCostCalc/style.less

@@ -0,0 +1,200 @@
+.drawerTable {
+  .header {
+    display: flex;
+    width: 100%;
+    flex-direction: row;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 16px;
+
+    .title {
+      font-weight: 500;
+      font-size: 16px;
+      color: #17181A;
+    }
+
+    .btns {
+      span {
+        display: inline-block;
+        cursor: pointer;
+        padding: 0 14px;
+        height: 24px;
+        line-height: 24px;
+        background: #FAFCFF;
+        border-radius: 4px;
+        font-weight: 400;
+        font-size: 14px;
+        color: #17181A;
+        border: 1px solid #DAE2F2;
+
+        &.close {
+          color: #fff;
+          background: #3377FF;
+          margin-left: 8px;
+        }
+      }
+    }
+  }
+}
+
+.DepartmentCostCalc {
+  background: #FFFFFF;
+  border-radius: 4px;
+
+  .header {
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+    align-items: center;
+    border-radius: 4px;
+    padding: 16px;
+    background-color: #fff;
+    border-bottom: 16px solid #F7F9FC;
+
+    .btnGoup {
+      &>span {
+        cursor: pointer;
+        display: inline-block;
+        color: #17181A;
+        line-height: 24px;
+        padding: 0 14px;
+        border-radius: 4px;
+        border: 1px solid #DAE2F2;
+        background: #FAFCFF;
+        margin-right: 8px;
+        font-weight: 400;
+        font-size: 14px;
+        color: #17181A;
+
+        &.onekeyCalcBtn {
+          color: #fff;
+          background: #3377FF;
+        }
+      }
+    }
+  }
+
+  .content {
+    padding: 16px;
+    padding-top: 0;
+
+    .inner {
+      display: flex;
+      width: 100%;
+      flex-direction: row;
+      justify-content: flex-start;
+      align-items: flex-start;
+
+      .left {
+        width: 220px;
+        height: calc(100vh - 223px);
+
+        border-radius: 4px;
+        padding-top: 8px;
+        margin-right: 16px;
+        border: 1px solid #DAE2F2;
+
+      }
+
+      .right {
+        width: calc(100% - 236px);
+
+        .toolBar {
+          display: flex;
+          flex-direction: row;
+          justify-content: space-between;
+          align-items: center;
+          margin-bottom: 12px;
+
+          .filterItem {
+            display: flex;
+            flex-direction: row;
+            justify-content:flex-start;
+            align-items: center;
+          }
+
+          .back {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            font-weight: 500;
+            font-size: 16px;
+            color: #17181A;
+            cursor: pointer;
+
+            &>span {
+              display:inline-flex;
+              justify-content: center;
+              align-items: center;
+              width: 24px;
+              height: 24px;
+              background: #FAFCFF;
+              border-radius: 4px;
+              margin-right: 8px;
+              border: 1px solid #DAE2F2;
+
+            }
+          }
+
+          .btnGroup {
+            &>span {
+              cursor: pointer;
+              display: inline-block;
+              color: #17181A;
+              line-height: 24px;
+              padding: 0 14px;
+              border-radius: 4px;
+              border: 1px solid #DAE2F2;
+              background: #FAFCFF;
+              margin-right: 8px;
+              font-weight: 400;
+              font-size: 14px;
+              color: #17181A;
+
+              &.calc {
+                color: #fff;
+                background: #3377FF;
+                border: none;
+              }
+            }
+          }
+        }
+
+        .KCIMTable {
+          .hover-row {
+            .hover-icon {
+              visibility: hidden;
+            }
+
+            &:hover {
+              .hover-icon {
+                visibility: visible;
+              }
+            }
+          }
+
+          .cost-ant-table-header {
+            .cost-ant-table-thead {
+              .cost-ant-table-cell {}
+            }
+          }
+
+          .cost-ant-table-body {
+            .cost-ant-table-row {
+              &.has-children {
+                td {
+                  border-right: none !important;
+                }
+
+                .cost-ant-table-cell-with-append {
+                  font-weight: bold;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+}

+ 49 - 45
src/pages/incomeCollectionAction/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2024-03-18 15:52:26
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-09-06 14:00:08
+ * @LastEditTime: 2024-10-16 17:11:00
  * @FilePath: /CostAccountingSys/src/pages/monthlyInfoCollection/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -53,9 +53,10 @@ const tableColumn: ProColumns[] = [
     {
         title: '金额',
         ellipsis: true,
+        align: 'right',
         dataIndex: 'amount',
         renderText(num) {
-             return formatMoneyNumber(num)
+            return formatMoneyNumber(num)
         },
     },
 ];
@@ -64,10 +65,10 @@ const tableColumn: ProColumns[] = [
 const IncomeCollectionAction = () => {
     const tableRef = useRef<ActionType>();
 
-    const { initialState,setInitialState } = useModel('@@initialState');
-    const [computeDate, set_computeDate] = useState<string>(initialState?initialState.computeDate:'');
+    const { initialState, setInitialState } = useModel('@@initialState');
+    const [computeDate, set_computeDate] = useState<string>(initialState ? initialState.computeDate : '');
     const [tableDataFilterParams, set_tableDataFilterParams] = useState<any | undefined>({ computeDate });
-    const [incomeCollectionData,set_incomeCollectionData] = useState<any>(undefined);
+    const [incomeCollectionData, set_incomeCollectionData] = useState<any>(undefined);
     const [loading, set_loading] = useState(false);
 
     const [tableDataSearchKeywords, set_tableDataSearchKeywords] = useState('');
@@ -81,15 +82,15 @@ const IncomeCollectionAction = () => {
         // _currentSelectedLeftObj = item;
     }
 
-    const getIncomeCollection = async ()=>{
-          const resp = await getIncomeCollectionReq({computeDate,current:1,pageSize:100});
- 
-          if(resp&&resp.list.length>0){
+    const getIncomeCollection = async () => {
+        const resp = await getIncomeCollectionReq({ computeDate, current: 1, pageSize: 100 });
+
+        if (resp && resp.list.length > 0) {
 
             set_incomeCollectionData(resp.list[0])
-          }else{
+        } else {
             set_incomeCollectionData(undefined)
-          }
+        }
     }
 
     const getTableData = async (params: any) => {
@@ -210,48 +211,50 @@ const IncomeCollectionAction = () => {
     }
 
     const optionBtnGroupshandle = async () => {
-        const { year, month } = incomeCollectionData?incomeCollectionData:{year:(computeDate.split('-'))[0],month:(computeDate.split('-'))[1]};
-          if (incomeCollectionData&&incomeCollectionData.isCollection) {
-            const resp = await cancelIncomeCollection({ year, month });
-            if (resp) {
-              message.success('操作成功!');
-              getIncomeCollection();
-              tableRef.current?.reload();
-            }
-          } else {
-            Modal.confirm({
-              title: '注意',
-              content: '收入归集操作会覆盖已有的归集后数据,确定要继续操作?',
-              okText: '确定',
-              cancelText: '取消',
-              onOk: async (...args) => {
+        const { year, month } = incomeCollectionData ? incomeCollectionData : { year: (computeDate.split('-'))[0], month: (computeDate.split('-'))[1] };
+
+        Modal.confirm({
+            title: '注意',
+            content: (incomeCollectionData && incomeCollectionData.isCollection)?'是否确认撤销归集?':'收入归集操作会覆盖已有的归集后数据,确定要继续操作?',
+            okText: '确定',
+            cancelText: '取消',
+            onOk: async (...args) => {
                 set_loading(true);
-                const resp = await startIncomeCollection({ year, month });
-                if (resp) {
-    
-                  set_loading(false);
-                  message.success('操作成功!');
-                  tableRef?.current?.reload();
-                  getIncomeCollection();
+                if (incomeCollectionData && incomeCollectionData.isCollection) {
+                    const resp = await cancelIncomeCollection({ year, month });
+                    if (resp) {
+                        message.success('操作成功!');
+                        getIncomeCollection();
+                        tableRef.current?.reload();
+                    }
                 } else {
-                  set_loading(false);
+                    const resp = await startIncomeCollection({ year, month });
+                    if (resp) {
+                        set_loading(false);
+                        message.success('操作成功!');
+                        tableRef?.current?.reload();
+                        getIncomeCollection();
+                    } else {
+                        set_loading(false);
+                    }
                 }
-              },
-            })
-          }
+                
+
+            },
+        })
     }
 
     useEffect(() => {
         if (currentSelectedLeftObj) {
-            set_tableDataFilterParams({ ...tableDataFilterParams, responsibilityCode: currentSelectedLeftObj.responsibilityCode,accountFilter:'' })
+            set_tableDataFilterParams({ ...tableDataFilterParams, responsibilityCode: currentSelectedLeftObj.responsibilityCode, accountFilter: '' })
             set_tableDataSearchKeywords('');
         }
     }, [currentSelectedLeftObj]);
 
 
-    useEffect(()=>{
+    useEffect(() => {
         getIncomeCollection();
-    },[computeDate])
+    }, [computeDate])
 
     useEffect(() => {
         getTreeData();
@@ -271,21 +274,22 @@ const IncomeCollectionAction = () => {
                             set_tableDataFilterParams({
                                 ...tableDataFilterParams,
                                 computeDate: dateString,
-                                accountFilter:''
+                                accountFilter: ''
                             });
-                            setInitialState((s:any)=>({...s,computeDate: dateString,}));
+                            setInitialState((s: any) => ({ ...s, computeDate: dateString, }));
                             set_tableDataSearchKeywords('');
                         }}
                         picker="month"
                         locale={locale}
                         defaultValue={moment(computeDate, 'YYYY-MM')}
                         format="YYYY-MM"
+                        autoComplete="off"
                         placeholder="选择年月"
                     />
                 </div>
                 <div className="btnGroup">
                     <span className="check" onClick={() => openDataTable()}>报表数据</span>
-                    <span className="oneKeyGet" onClick={() => optionBtnGroupshandle()}>{(incomeCollectionData&&incomeCollectionData.isCollection) ? '撤销归集' : '开始归集'}</span>
+                    <span className="oneKeyGet" onClick={() => optionBtnGroupshandle()}>{(incomeCollectionData && incomeCollectionData.isCollection) ? '撤销归集' : '开始归集'}</span>
                 </div>
             </div>
             <div className="pageContent">
@@ -314,7 +318,7 @@ const IncomeCollectionAction = () => {
                             <div className="rightTool">
                                 <div className='filterItem' style={{ marginLeft: 16, width: 233 }}>
                                     <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                                    <Input placeholder={'会计科目代码/名称'} allowClear value={tableDataSearchKeywords}
+                                    <Input placeholder={'会计科目代码/名称'} allowClear value={tableDataSearchKeywords} autoComplete='off'
                                         suffix={
                                             <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle(`accountFilter`)} />
                                         }
@@ -342,7 +346,7 @@ const IncomeCollectionAction = () => {
                             rowKey='id'
                             request={(params) => getTableData(params)}
                             tableAlertRender={false}
-                            scroll={{ x: scrollX,y:`calc(100vh - 322px)` }}
+                            scroll={{ x: scrollX, y: `calc(100vh - 322px)` }}
                             params={tableDataFilterParams}
                         />
                     </div>

+ 2 - 2
src/pages/monthlyInfoCollection/components/leftAndRighrStructure.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2024-03-19 10:55:39
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 15:25:58
+ * @LastEditTime: 2024-09-09 10:41:16
  * @FilePath: /CostAccountingSys/src/pages/monthlyInfoCollection/components/leftAndRighrStructure.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -364,7 +364,7 @@ export const LeftAndRighrStructure = (props: LeftAndRighrStructure) => {
                         <div className="rightTool">
                             <div className='filterItem' style={{ marginLeft: 16, width: 233 }}>
                                 <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                                <Input placeholder={'收入项目代码/名称'} allowClear
+                                <Input placeholder={'收入项目代码/名称'} allowClear autoComplete='off'
                                     suffix={
                                         <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle(`${tableSearchKey}`)} />
                                     }

+ 2 - 1
src/pages/monthlyInfoCollection/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2024-03-18 15:52:26
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 15:39:20
+ * @LastEditTime: 2024-09-25 14:56:09
  * @FilePath: /CostAccountingSys/src/pages/monthlyInfoCollection/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -176,6 +176,7 @@ const MonthlyInfoCollection = () => {
                         locale={locale}
                         defaultValue={moment(computeDate, 'YYYY-MM')}
                         format="YYYY-MM"
+                        autoComplete="off"
                         placeholder="选择年月"
                     />
                 </div>

+ 10 - 27
src/pages/monthlyInfoSearch/empCostDataImport/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-06-11 11:26:11
+ * @LastEditTime: 2024-10-16 13:30:45
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -11,7 +11,7 @@ import { createFromIconfontCN } from '@ant-design/icons';
 
 import { ModalForm } from '@ant-design/pro-form';
 import FormItem from 'antd/es/form/FormItem';
-import { DatePicker, Input } from 'antd';
+import { Input } from 'antd';
 import { useEffect, useRef, useState } from 'react';
 
 import { getData, downloadTemplateReq, importEmpCostDataPost } from './service';
@@ -59,27 +59,31 @@ export default function EmpCostDataImport(
     },
     {
       title: '总工时',
+      align:'center',
       dataIndex: 'hour',
     },
     {
       title: '固定薪资(元)',
       dataIndex: 'salary',
+      align:'center',
       renderText(number, record, index, action) {
-        return formatMoneyNumber(number)
+        return <div style={{textAlign:'right',paddingRight:'30%'}}>{formatMoneyNumber(number)}</div>
       },
     },
     {
       title: '变动薪资(元)',
+      align:'center',
       dataIndex: 'variableCompensation',
       renderText(number, record, index, action) {
-        return formatMoneyNumber(number)
+        return <div style={{textAlign:'right',paddingRight:'30%'}}>{formatMoneyNumber(number)}</div>
       },
     },
     {
       title: '总成本(元)',
       dataIndex: 'cost',
+      align:'center',
       renderText(number, record, index, action) {
-        return <span style={{color:'#FF8C19'}}>{formatMoneyNumber(number)}</span>
+        return <div style={{color:'#FF8C19',}}>{formatMoneyNumber(number)}</div>
       },
 
     },
@@ -189,30 +193,9 @@ export default function EmpCostDataImport(
     <KCIMPagecontainer className="empCostDataImport" title={false}>
       <div className="toolBar">
         <div className="filter">
-          {/* <div className="filterItem">
-            {
-              <div className="search">
-                <span>核算年月:</span>
-                <DatePicker
-                  onChange={(data, dateString) => {
-                    set_computeDate(dateString);
-                    set_tableDataFilterParams({
-                      ...tableDataFilterParams,
-                      computeDate: dateString,
-                    });
-                  }}
-                  picker="month"
-                  locale={locale}
-                  defaultValue={moment(`${new Date().getFullYear()}-${(new Date().getMonth()+1).toString().padStart(2, '0')}`, 'YYYY-MM')}
-                  format="YYYY-MM"
-                  placeholder="选择年月"
-                />
-              </div>
-            }
-          </div> */}
           <div className='filterItem' style={{ width: 205 }}>
             <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-            <Input placeholder={'输入工号,姓名'} allowClear
+            <Input placeholder={'输入工号,姓名'} allowClear autoComplete='off'
               suffix={
                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
               }

+ 5 - 25
src/pages/monthlyInfoSearch/incomeCostDataImport/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-06-11 10:44:27
+ * @LastEditTime: 2024-09-25 14:59:23
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -10,9 +10,9 @@
 
 import { createFromIconfontCN } from '@ant-design/icons';
 
-import { ModalForm, ProFormDatePicker } from '@ant-design/pro-form';
+import { ModalForm } from '@ant-design/pro-form';
 import FormItem from 'antd/es/form/FormItem';
-import { DatePicker, Input, message, Modal, Dropdown } from 'antd';
+import { Input, message, Modal, Dropdown } from 'antd';
 import { useEffect, useRef, useState } from 'react';
 import type { MenuProps } from 'antd';
 
@@ -431,30 +431,10 @@ export default function IncomeCostDataImport({ date, btnPerm }: { date: string,
     <div className="IncomeCostDataImport" >
       <div className="toolBar">
         <div className="filter">
-          {/* <div className="filterItem">
-            {
-              <div className="search">
-                <span>核算年月:</span>
-                <DatePicker
-                  onChange={(data, dateString) => {
-                    set_computeDate(dateString);
-                    set_tableDataFilterParams({
-                      ...tableDataFilterParams,
-                      computeDate: dateString,
-                    });
-                  }}
-                  picker="month"
-                  locale={locale}
-                  defaultValue={moment(`${new Date().getFullYear()}-${(new Date().getMonth() + 1).toString().padStart(2, '0')}`, 'YYYY-MM')}
-                  format="YYYY-MM"
-                  placeholder="选择年月"
-                />
-              </div>
-            }
-          </div> */}
+          
           <div className='filterItem' style={{ width: 205 }}>
             <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-            <Input placeholder={'文件名称'} allowClear
+            <Input placeholder={'文件名称'} allowClear autoComplete='off'
               suffix={
                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('fileName')} />
               }

+ 7 - 52
src/pages/monthlyInfoSearch/patientChargeItemsImport/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-06-11 13:33:14
+ * @LastEditTime: 2024-11-20 16:29:50
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -16,7 +16,7 @@ import {
 } from '@ant-design/pro-components';
 import { ModalForm } from '@ant-design/pro-form';
 import FormItem from 'antd/es/form/FormItem';
-import { DatePicker, Input } from 'antd';
+import {Input } from 'antd';
 import { useEffect, useRef, useState } from 'react';
 
 import { getData, downloadTemplateReq, getTotalNumReq, importPatientChargeItemDataPost } from './service';
@@ -75,15 +75,18 @@ const columns: ProColumns[] = [
     title: '数量',
     dataIndex: 'num',
     width:60,
+    align:'right'
   },
   {
     title: '单价',
     width:120,
     dataIndex: 'price',
+    align:'right'
   },
   {
     title: '金额',
     width:140,
+    align:'right',
     dataIndex: 'amount',
     renderText(num) {
       return formatMoneyNumber(num);
@@ -243,7 +246,7 @@ export default function PatientChargeItemsImport(
   };
 
   useEffect(() => {
-    getTotalNum();
+    // getTotalNum();
   }, [tableDataFilterParams]);
 
   useEffect(() => {
@@ -267,55 +270,6 @@ export default function PatientChargeItemsImport(
     <KCIMPagecontainer className="patientChargeItemsImport" title={false}>
       <div className="toolBar">
         <div className="filter">
-          {/* <div className="filterItem">
-            {
-              <div className="search">
-                <span>核算年月:</span>
-                <DatePicker
-                  onChange={(data, dateString) => {
-                    set_computeDate(dateString);
-                    set_tableDataFilterParams({
-                      ...tableDataFilterParams,
-                      computeDate: dateString,
-                    });
-                  }}
-                  picker="month"
-                  locale={locale}
-                  defaultValue={moment(
-                    `${new Date().getFullYear()}-${(new Date().getMonth() + 1)
-                      .toString()
-                      .padStart(2, '0')}`,
-                    'YYYY-MM',
-                  )}
-                  format="YYYY-MM"
-                  placeholder="选择年月"
-                />
-              </div>
-            }
-          </div> */}
-
-          {/* <div className='filterItem' style={{ marginLeft: 16 }}>
-            <span className='label'>项目类别:</span>
-            <ProFormSelect
-              noStyle
-              allowClear
-              placeholder="请选择"
-              style={{ width: 160, marginRight: 16 }}
-              request={async () => {
-                const resp = await getTargetDic('CHARGE_ITEM_TYPE');
-                if (resp) {
-                  const { dataVoList } = resp;
-                  return dataVoList.map((a: any) => ({ label: a.name, value: a.code }));
-                }
-                return [];
-              }}
-              fieldProps={{
-                onChange(value, option) {
-                  set_tableDataFilterParams({ ...tableDataFilterParams, itemType: value })
-                },
-              }}
-            />
-          </div> */}
           <div className="filterItem" style={{ marginLeft: 16, width: 230 }}>
             <span className="label" style={{ whiteSpace: 'nowrap' }}>
               {' '}
@@ -324,6 +278,7 @@ export default function PatientChargeItemsImport(
             <Input
               placeholder={'收费项目代码/名称'}
               allowClear
+              autoComplete='off'
               suffix={
                 <IconFont
                   type="iconsousuo"

+ 3 - 47
src/pages/monthlyInfoSearch/patientInfoImport/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 15:35:09
+ * @LastEditTime: 2024-09-25 14:59:59
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -11,7 +11,7 @@ import { createFromIconfontCN } from '@ant-design/icons';
 
 import { ModalForm, ProFormText } from '@ant-design/pro-form';
 import FormItem from 'antd/es/form/FormItem';
-import { DatePicker, Input } from 'antd';
+import { Input } from 'antd';
 import { useEffect, useRef, useState } from 'react';
 
 import { getData, downloadTemplateReq, importPatientInfoDataPost } from './service';
@@ -301,30 +301,9 @@ export default function PatientInfoImport(
     <KCIMPagecontainer className="patientInfoImport" title={false}>
       <div className="toolBar">
         <div className="filter">
-          {/* <div className="filterItem">
-            {
-              <div className="search">
-                <span>核算年月:</span>
-                <DatePicker
-                  onChange={(data, dateString) => {
-                    set_computeDate(dateString);
-                    set_tableDataFilterParams({
-                      ...tableDataFilterParams,
-                      computeDate: dateString,
-                    });
-                  }}
-                  picker="month"
-                  locale={locale}
-                  defaultValue={moment(`${new Date().getFullYear()}-${(new Date().getMonth()+1).toString().padStart(2, '0')}`, 'YYYY-MM')}
-                  format="YYYY-MM"
-                  placeholder="选择年月"
-                />
-              </div>
-            }
-          </div> */}
           <div className='filterItem' style={{ width: 205 }}>
             <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-            <Input placeholder={'患者ID/姓名'} allowClear
+            <Input placeholder={'患者ID/姓名'} allowClear autoComplete='off'
               suffix={
                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
               }
@@ -346,30 +325,7 @@ export default function PatientInfoImport(
 
             />
           </div>
-          {/* <div className='filterItem' style={{ marginLeft: 16, width: 205 }}>
-            <span className='label' style={{ whiteSpace: 'nowrap' }}> 患者姓名:</span>
-            <Input placeholder={'请输入'} allowClear
-              suffix={
-                <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('patientName')} />
-              }
-              onChange={(e) => {
-                set_tableDataSearchKeywords(e.target.value);
-                if (e.target.value.length == 0) {
-                  set_tableDataFilterParams({
-                    ...tableDataFilterParams,
-                    patientName: ''
-                  });
-                }
-              }}
-              onPressEnter={(e) => {
-                set_tableDataFilterParams({
-                  ...tableDataFilterParams,
-                  patientName: ((e.target) as HTMLInputElement).value
-                });
-              }}
 
-            />
-          </div> */}
         </div>
         <div className="btnGroup">
           {ifShowCancelBtn && <span onClick={() => cancelHandle().then((isOk) => {

+ 2 - 2
src/pages/monthlyInfoSearch/wholeHospIncomeAndCost/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-04-12 16:14:00
+ * @LastEditTime: 2024-09-25 15:00:46
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -18,7 +18,7 @@ import FormItem from 'antd/es/form/FormItem';
 import { ActionType, ProFormDatePicker, ProFormDateTimePicker, ProFormInstance, ProFormText } from '@ant-design/pro-components';
 import { ModalForm, ProFormDependency, ProFormDigit, ProFormRadio, ProFormSelect, ProFormSwitch } from '@ant-design/pro-form'
 import { ProColumns } from '@ant-design/pro-table';
-import { DatePicker, message, Popconfirm, Form } from 'antd';
+import { message, Popconfirm, Form } from 'antd';
 import { Fragment, useEffect, useRef, useState } from 'react';
 
 import 'moment/locale/zh-cn';

+ 66 - 26
src/pages/reportExport/report/ExportProgressModal.tsx

@@ -2,12 +2,12 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-12-26 17:29:47
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-01-21 22:37:13
- * @FilePath: /CostAccountingSys/src/pages/reportExport/report/ProgressModal.tsx
+ * @LastEditTime: 2024-11-14 15:40:58
+ * @FilePath: /CostAccountingSys/src/pages/reportExport/report/ExportProgressModal.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
 import React, { useState, useEffect, useRef } from 'react';
-import { Modal, Progress } from 'antd';
+import { Modal, Progress, message } from 'antd';
 
 interface ExportProgressModalProps {
   visible: boolean;
@@ -17,41 +17,81 @@ interface ExportProgressModalProps {
 }
 
 const ExportProgressModal: React.FC<ExportProgressModalProps> = ({ visible, onCancel, fetchData, onCompletion }) => {
-  const [progress, setProgress] = useState<number>(0);
-  const isFetchingRef = useRef<boolean>(false);
+  const [progress, setProgress] = useState<number>(0); // 进度百分比
+  const isFetchingRef = useRef<boolean>(false); // 是否正在获取数据的标志,防止重复请求
+  const intervalIdRef = useRef<NodeJS.Timeout | null>(null); // 定时器 ID
+  const maxRetries = 3; // 最大重试次数
+  const retryCountRef = useRef<number>(0); // 记录重试次数
 
-  useEffect(() => {
-    const fetchPageData = async () => {
-      if (!isFetchingRef.current) {
-        isFetchingRef.current = true;
-        const data = await fetchData();
-        const currentProgress = Math.round((data.currentCount / data.totalCount) * 100);
-        console.log({currentProgress,data});
-        setProgress(currentProgress);
-        if (currentProgress >= 100||progress >= 100) {
-          onCompletion();
-          setProgress(0);
-        } else {
-          setTimeout(fetchPageData, 1000); // 计划下一次请求
-        }
+  const fetchProgressData = async () => {
+    if (isFetchingRef.current) return;
 
-        isFetchingRef.current = false;
+    isFetchingRef.current = true;
+    try {
+      const data = await fetchData();
+      const { currentCount, totalCount } = data;
+      
+      // 严格比较导出的实际进度
+      if (currentCount >= totalCount) {
+        setProgress(100); // 设置最终进度为100%
+        clearInterval(intervalIdRef.current!); 
+        intervalIdRef.current = null;
+        message.success("导出完成!");
+        onCompletion();
+      } else {
+        // 如果未完成,更新进度条并重置重试次数
+        const currentProgress = Math.round((currentCount / totalCount) * 100);
+        setProgress(currentProgress);
+        retryCountRef.current = 0;
+      }
+    } catch (error) {
+      console.error("获取进度数据出错:", error);
+      retryCountRef.current += 1;
 
+      if (retryCountRef.current > maxRetries) {
+        clearInterval(intervalIdRef.current!);
+        intervalIdRef.current = null;
+        message.error("导出失败,请稍后重试!");
       }
-    };
+    } finally {
+      isFetchingRef.current = false;
+    }
+  };
 
+  useEffect(() => {
     if (visible) {
-      fetchPageData();
+      // 每秒调用 fetchProgressData
+      intervalIdRef.current = setInterval(fetchProgressData, 1000);
+    } else {
+      setProgress(0); // 重置进度
+      if (intervalIdRef.current) {
+        clearInterval(intervalIdRef.current);
+        intervalIdRef.current = null;
+      }
     }
 
-
     return () => {
-      isFetchingRef.current = false; // 在组件卸载时重置标志
+      if (intervalIdRef.current) {
+        clearInterval(intervalIdRef.current);
+        intervalIdRef.current = null;
+      }
     };
-  }, [visible, fetchData]);
+  }, [visible]);
 
   return (
-    <Modal title="导出进度" open={visible} footer={null} onCancel={onCancel}>
+    <Modal
+      title="导出进度"
+      open={visible}
+      footer={null}
+      onCancel={() => {
+        setProgress(0); // 关闭对话框时重置进度
+        if (intervalIdRef.current) {
+          clearInterval(intervalIdRef.current); // 清除定时器
+          intervalIdRef.current = null;
+        }
+        onCancel();
+      }}
+    >
       <Progress percent={progress} />
     </Modal>
   );

+ 279 - 99
src/pages/reportExport/report/index.tsx

@@ -2,21 +2,21 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-01-04 14:12:31
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-15 14:19:33
+ * @LastEditTime: 2024-11-15 14:31:22
  * @FilePath: /BudgetManaSystem/src/pages/budgetMana/oneBatch/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
 
 
-import { ActionType, ProColumns } from '@ant-design/pro-components';
-import { Space, Dropdown, MenuProps, DatePicker, Modal, Progress } from 'antd';
+import { ActionType, ProColumns, ProFormText } from '@ant-design/pro-components';
+import { Space, Dropdown, MenuProps, DatePicker } from 'antd';
 import { useEffect, useRef, useState } from 'react';
-import { getData, getRedirReportData } from './service';
+import { getData, getRedirReportData, getSearchRowsReq } from './service';
 
 
 import './style.less';
 
-import { useParams } from '@umijs/max';
+
 import { createFromIconfontCN, DownOutlined } from '@ant-design/icons';
 
 import exportTableToExcel from '@/utils/tableToExcel';
@@ -33,7 +33,8 @@ import { getStringWidth } from '@/utils/tooljs';
 
 import ExportProgressModal from './ExportProgressModal';
 import { getParamsDataBySysId } from '@/services/getDic';
-import { useModel } from '@umijs/max';
+import { useModel, useParams } from '@umijs/max';
+
 
 
 const IconFont = createFromIconfontCN({
@@ -47,33 +48,58 @@ interface Searchable {
 
 let searchKeys: any[] = [];
 let totalTableData: any[] = [];
+let dataSource: any[] = [];
 let tableDataSearchKeywords: undefined | string = undefined;
 let currentPage = 0;
 let maxFetchCount = 0;
+let prevParams: any = null;
+
+
+
+function multiAttributeSearchOptimized(dataArray: any[], keys: any[], keywords: any[]) {
+  // 确保关键词为非空数组
+  if (!Array.isArray(keywords) || keywords.length === 0) {
+    return dataArray;
+  }
 
+  const lowerCaseKeywords = keywords.map(kw => kw.toLowerCase());
 
+  return dataArray.filter((item: { [x: string]: any; }) => {
+    // 对每一项数据进行指定属性的搜索
+    return keys.some((key: string | number) => {
+      const value = item[key];
+      // 确保属性存在且为字符串类型
+      if (typeof value === 'string') {
+        // 遍历每一个关键词,判断是否存在匹配
+        return lowerCaseKeywords.some(keyword => value.toLowerCase().includes(keyword));
+      }
+      return false;
+    });
+  });
+}
 
-const ReportExport = () => {
 
 
-  const { reportCode: urlReportCode } = useParams();
+const ReportExport = ({ reportCode, propsParams, tableScrollH }: { reportCode: string, propsParams: any, tableScrollH: number }) => {
+
+  const { reportCode: urlReportCode } = reportCode ? { reportCode } : useParams();
 
   const [tableColumn, set_tableColumn] = useState<ProColumns[] | any[]>([]);
 
   const [tableScrollX, set_tableScrollX] = useState<number>(1000);
 
-  const { initialState,setInitialState } = useModel('@@initialState');
-  const [currentComputeDate, set_currentComputeDate] = useState<string | undefined>(initialState?initialState.computeDate:undefined);
+  const { initialState, setInitialState } = useModel('@@initialState');
+  const [currentComputeDate, set_currentComputeDate] = useState<string | undefined>(propsParams ? propsParams.compute_date : (initialState ? initialState.computeDate : undefined));
 
   const [breadCrumbList, set_breadCrumbList] = useState<any[]>([]);
 
-  const [tableDataFilterParams, set_tableDataFilterParams] = useState<any | undefined>(undefined);
+  const [tableDataFilterParams, set_tableDataFilterParams] = useState<any | undefined>(propsParams ? { parameter: propsParams } : undefined);
 
   const tableRef = useRef<ActionType>();
 
-  const [loading, set_loading] = useState(false);
+  const [loading, set_loading] = useState(true);
 
-  const [tableH, set_tableH] = useState(0);
+  const [tableH, set_tableH] = useState(tableScrollH ? tableScrollH : 0);
 
   const [step, set_step] = useState(0);
 
@@ -81,10 +107,15 @@ const ReportExport = () => {
 
   const [pageSize, set_pageSize] = useState(20);
   const [openProcessModal, set_openProcessModal] = useState(false);
+  const [searchRows, set_searchRows] = useState<any[]>([]);
+  const [tableData, set_tableData] = useState<any[]>([]);
+  const [searchType, set_searchType] = useState(0);
+  const [pagination, set_pagination] = useState<any>(null);
 
 
   const reportJumphandle = (reportData: any) => {
-
+    set_loading(true);
+    set_searchRows([]);
     let parameter: { [key: string]: any } = {};
     const { redirectParameter = undefined } = reportData;
     const _step = step + 1;
@@ -112,27 +143,46 @@ const ReportExport = () => {
     );
 
     set_step(_step);
-
-    set_tableDataFilterParams({
-      ...tableDataFilterParams, reportCode: reportData.redirectReportCode, parameter: {
-        compute_date: currentComputeDate,
-        ...parameter
-      }
-    });
+    getSearchRows(reportData.redirectReportCode, parameter);
 
     totalTableData = [];
     currentPage = 0;
+    dataSource = [];
+  }
+
+  const getSearchRows = async (code: string, others?: any) => {
+    const resp = await getSearchRowsReq(code);
+
+    if (resp) {
+      const rows = resp.reportIndex ? resp.reportIndex : [];
+      set_searchType(resp.indexType);
+      set_searchRows(rows);
+      const searchObject = rows.reduce((acc: { [x: string]: any; }, curr: { columnIndex: string | number; value: any; }) => {
+        acc[curr.columnIndex] = '';
+        return acc;
+      }, {});
+      set_tableDataFilterParams({ ...tableDataFilterParams, reportCode: code, parameter: { ...others, compute_date: currentComputeDate, ...searchObject, ...(reportCode ? tableDataFilterParams?.parameter : {}) } });
+    }
   }
 
 
   const getTableData = async (params: any) => {
 
+    if (!openProcessModal) {
+      set_loading(true);
+    }
+  
+
+    if (!params.reportCode || (JSON.stringify(prevParams) === JSON.stringify(params))) {
+      // 参数相同,不执行请求
+      return;
+    }
+
     const { systemId } = JSON.parse(localStorage.getItem('currentSelectedTab') as string)
     const paramsData = await getParamsDataBySysId(systemId, '1806523783696224256');
-    const pageSize = paramsData.value?Number(paramsData.value):100;
-    set_pageSize(pageSize);    
-    const { parameter, current, reportCode } = params;
-    
+    const pageSize = paramsData.value ? Number(paramsData.value) : 100;
+    set_pageSize(pageSize);
+    const { parameter = {}, current, reportCode } = params;
     searchKeys = [];
     let resp: any = undefined;
 
@@ -156,26 +206,28 @@ const ReportExport = () => {
     }
 
     if (resp) {
-
+      prevParams = params;
       const { title, data: assignmentData, reportName, current, totalCount, totalPage, pageSize } = resp;
       set_reportName(reportName);
 
       let scrollX = 0;
       const columns: ProColumns[] = title.map((item: any, index: number) => {
+
         if (item.search) {
           searchKeys.push({ name: item.name, key: item.columnName });
         }
-        const wid = (item.name.length * 17) > 100 ? (item.name.length * 17): 100;
+        const wid = (item.name.length * 17) > 100 ? (item.name.length * 17) : 100;
         scrollX = scrollX + wid;
-        // console.log({[`${item.name}`]:wid});
+
         return {
           title: item.name,
           dataIndex: `${item.columnName}`,
           key: `${item.columnName}`,
-          width:wid ,
+          width: wid,
           ellipsis: true,
           fixed: item.freeze ? true : false,
           hideInTable: item.hide,
+          align: (item.dataType == 3 || item.dataType == 2) ? 'right' : 'left',
           sorter: item.sortStatus ? (a: any, b: any) => {
             if (item.dataType == 3) {
               //数值
@@ -266,10 +318,6 @@ const ReportExport = () => {
         return { ...item, ...rowData, id: Math.random(), columns }
       });
 
-      // set_tableData(data);
-      set_loading(false);
-
-
 
       if (openProcessModal) {
         totalTableData = [...totalTableData, ...exportdata];
@@ -281,38 +329,40 @@ const ReportExport = () => {
       }
 
       if (!openProcessModal) {
-        return {
-          data: data,
-          success: true,
+        set_tableData(data);
+        dataSource = data;
+        set_pagination({
+          current,
           total: totalCount,
           pageSize: pageSize,
           totalPage: totalPage,
-        }
+        })
+
+      }
+
+    } else {
+      prevParams = undefined;
+      if (!openProcessModal) {
+        set_tableData([]);
+        dataSource = [];
+        set_pagination(false)
       }
 
     }
+    if (!openProcessModal) {
+      set_loading(false);
+    }
     return openProcessModal ? { currentCount: 0, totalCount: 0 } : []
   }
 
 
-  // const tableDataSearchHandle = () => {
-  //   if (tableDataSearchKeywords) {
-  //     const keys = searchKeys.map(a => a.key);
-  //     const result = multiAttributeSearchOptimized(totalTableData, keys, [tableDataSearchKeywords as string]);
-  //     set_tableData(result);
-
-  //   } else {
-  //     set_tableData(totalTableData);
-  //   }
-
-  // }
-
-
 
   const handleResize = (e: any) => {
     const wH = e.target.innerHeight;
     const tableHeight = wH - 290;
-    set_tableH(tableHeight);
+    if (!reportCode) {
+      set_tableH(tableHeight);
+    }
   }
 
   function doResize() {
@@ -382,35 +432,110 @@ const ReportExport = () => {
 
   //面包屑跳转
   const switchHandle = (data: any) => {
+    set_loading(true);
     set_step(data.index);
     const _breadCrumbList = breadCrumbList.filter((a: any) => a.index <= data.index);
     set_breadCrumbList([..._breadCrumbList]);
-    set_tableDataFilterParams({ ...tableDataFilterParams, ...data.params });
+    getSearchRows(data.params.reportCode);
   }
 
 
-  useEffect(() => {
-    // 在这里处理路由参数变化的逻辑
 
-    set_tableDataFilterParams({ reportCode: urlReportCode, parameter: { compute_date: currentComputeDate } });
+  const handleSearchChange = (e: any, node: any, index: number) => {
+    const { value } = e.target;
+
+    // 更新搜索内容
+    set_searchRows((prevSearchRows) => {
+      const updatedSearchRows = [...prevSearchRows];
+      updatedSearchRows[index] = { ...updatedSearchRows[index], value };
+      return updatedSearchRows;
+    });
+
+  };
+
+  const handleReset = () => {
+    set_searchRows((prevSearchRows) => {
+      const newObj = prevSearchRows.map((row) => ({ ...row, value: '' }))
+      const searchObject = newObj.reduce((acc, curr) => {
+        acc[curr.columnIndex] = curr.value ? curr.value : '';
+        return acc;
+      }, {});
 
+      set_tableDataFilterParams({ ...tableDataFilterParams, parameter: { ...( tableDataFilterParams.parameter), ...searchObject } });
+
+      return newObj
+    }
+
+    );
+
+  };
+
+  const tableDataSearchHandle = () => {
+
+    const searchObject = searchRows.reduce((acc, curr) => {
+      acc[curr.columnIndex] = curr.value ? curr.value : '';
+      return acc;
+    }, {});
+    set_tableDataFilterParams({
+      ...tableDataFilterParams,
+      parameter: { ...(tableDataFilterParams.parameter), ...searchObject }
+    });
+
+  }
+
+  const tableDataColumnSearchHandle = () => {
+
+    if (tableDataSearchKeywords) {
+      // 确保 searchKeys 不为空
+      if (searchKeys.length === 0) {
+        set_tableData(dataSource);
+        return;
+      }
+
+      const keys = searchKeys.map(a => a.key);
+      const result = multiAttributeSearchOptimized(tableData, keys, [tableDataSearchKeywords as string]);
+      set_tableData(result);
+    } else {
+      // 恢复到初始数据
+      set_tableData(dataSource);
+    }
+  };
+
+
+  useEffect(() => {
+    // 在这里处理路由参数变化的逻辑
+    set_loading(true);
+    set_tableDataFilterParams(undefined);
     set_breadCrumbList([{
       name: '首页',
       index: 0,
-      params: { reportCode: urlReportCode, parameter: { compute_date: currentComputeDate } }
+      params: { reportCode: urlReportCode, parameter: { ...(reportCode ? tableDataFilterParams?.parameter : {}), compute_date: currentComputeDate } }
     }]);
 
+    urlReportCode && getSearchRows(urlReportCode);
+
   }, [urlReportCode]);
 
 
   useEffect(() => {
 
     if (currentComputeDate) {
-      set_tableDataFilterParams({ ...tableDataFilterParams, parameter: { ...(tableDataFilterParams?.parameter ?? {}), compute_date: currentComputeDate } });
+      const searchObject = searchRows.reduce((acc: { [x: string]: any; }, curr: { columnIndex: string | number; value: any; }) => {
+        acc[curr.columnIndex] = '';
+        return acc;
+      }, {});
+      set_tableDataFilterParams({ ...tableDataFilterParams, parameter: { ...(reportCode ? tableDataFilterParams?.parameter : {}), compute_date: currentComputeDate,...searchObject } });
     }
   }, [currentComputeDate]);
 
 
+  useEffect(() => {
+    if (tableDataFilterParams) {
+      getTableData(tableDataFilterParams);
+    }
+  }, [tableDataFilterParams]);
+
+
 
 
 
@@ -426,7 +551,7 @@ const ReportExport = () => {
 
 
   return (
-    <KCIMPagecontainer className='ReportTemplate' title={false}>
+    <KCIMPagecontainer className='ReportTemplate' title={false} style={reportCode ? { border: 'none' } : {}}>
 
       <ExportProgressModal
         visible={openProcessModal}
@@ -448,55 +573,109 @@ const ReportExport = () => {
           }
         </div>
       }
-      <div className='contentWrap'>
-        {currentComputeDate && (<div className='search'>
-          <span>核算年月:</span>
-          <DatePicker
-            onChange={(data, dateString) => {
-              set_currentComputeDate(dateString);
-              setInitialState((s:any)=>({...s,computeDate:dateString}))
-            }}
-            allowClear={false}
-            picker='month'
-            locale={locale}
-            value={moment(currentComputeDate, 'YYYY-MM')}
-            format='YYYY-MM' placeholder="请选择核算年月" />
-
-          {/* <div style={{ display:searchKeys.length>0?'flex':'none', flexDirection: 'row', alignItems: 'center', marginLeft: 16 }}>
-            <span style={{ whiteSpace: 'nowrap' }}>检索:</span>
-            <ProFormText
-              noStyle
-              // style={{width:(searchKeys.length)*20}}
-              width={(searchKeys.length)*100}
-              placeholder={`${searchKeys.reduce((prev, cur) => `${prev.length>0?prev+'/':prev}` + cur.name, '')}`}
-              fieldProps={{
-                suffix:
-                  < IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle()} />
-                ,
-                onChange: (e) => {
-                    if(e.target.value){
+      <div className='contentWrap' style={reportCode ? { padding: 0 } : {}}>
+        <div className='toolbar'>
+          {(currentComputeDate && !reportCode) && (<div className='search'>
+            <span>核算年月:</span>
+            <DatePicker
+              disabled={breadCrumbList.length>1}
+              onChange={(data, dateString) => {
+                set_currentComputeDate(dateString);
+                setInitialState((s: any) => ({ ...s, computeDate: dateString }))
+              }}
+              allowClear={false}
+              picker='month'
+              locale={locale}
+              autoComplete="off"
+              value={moment(currentComputeDate, 'YYYY-MM')}
+              format='YYYY-MM' placeholder="请选择核算年月" />
+
+            <div style={{ display: (searchType == 1 && searchKeys.length > 0) ? 'flex' : 'none', flexDirection: 'row', alignItems: 'center', marginLeft: 16 }}>
+              <span style={{ whiteSpace: 'nowrap' }}>检索:</span>
+              <ProFormText
+                noStyle
+                // style={{width:(searchKeys.length)*20}}
+                width={((searchKeys.length) * 100) > 675 ? 675 : (searchKeys.length) * 100}
+                placeholder={searchKeys.reduce((prev, cur) => `${prev.length > 0 ? prev + '/' : prev}${cur.name}`, '')}
+                fieldProps={{
+                  suffix:
+                    < IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataColumnSearchHandle()} />
+                  ,
+                  onChange: (e) => {
+                    if (e.target.value) {
                       tableDataSearchKeywords = e.target.value
-                    }else{
+                    } else {
                       tableDataSearchKeywords = undefined;
-                      tableDataSearchHandle();
+                      tableDataColumnSearchHandle();
                     }
-                },
-                onPressEnter: (e) => tableDataSearchHandle()
-              }}
-            />
-          </div> */}
+                  },
+                  onPressEnter: (e) => tableDataColumnSearchHandle()
+                }}
+              />
+            </div>
+
+            <div style={{ display: (searchRows && searchRows.length > 0) ? 'flex' : 'none', flexDirection: 'row', alignItems: 'center', marginLeft: 8 }}>
+              {/* <span style={{ whiteSpace: 'nowrap' }}>检索:</span> */}
+              {
+                (searchRows ? searchRows : []).map((node, index) => {
+                  return (
+                    <ProFormText
+                      key={index}
+                      noStyle
+                      width={150}
+                      // allowClear={false}
+                      style={{ marginRight: 8 }}
+                      placeholder={`${node.tips}`}
+                      fieldProps={{
+                        style: { marginRight: 8 },
+                        value: node.value,
+                        // suffix:
+                        //   < IconFont type="iconsousuo" style={{ color: '#99A6BF' }} 
+
+                        //   />
+                        // ,
+                        onChange: (e) => {
+                          handleSearchChange(e, node, index)
+                        },
+
+                      }}
+                    />
+                  )
+                })
+              }
+            </div>
+
+          </div>)}
+          {!reportCode && <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center' }}>
+            {searchType == 2 && <div className='searchBtn' onClick={() => handleReset()}>重置</div>}
+            {searchType == 2 && <div className='searchBtn' onClick={() => tableDataSearchHandle()}>查询</div>}
+            <div className='export' onClick={() => set_openProcessModal(true)}>导出</div>
+          </div>}
+        </div>
+
 
-        </div>)}
-        <div className='export' onClick={() => set_openProcessModal(true)}>导出</div>
 
-        <div className='content'>
-          {currentComputeDate && <KCIMTable actionRef={tableRef} rowKey='id' columns={tableColumn as ProColumns[]}
+        <div className='ReportTemplateContent' style={reportCode ? { paddingTop: 0 } : {}}>
+
+          {/* {(currentComputeDate&&(searchType == 0||searchType == 2) ) && <KCIMTable actionRef={tableRef} rowKey='id' columns={tableColumn as ProColumns[]}
             params={tableDataFilterParams}
-            // loading={loading}
             scroll={{ x: tableScrollX, y: tableH }}
-            // dataSource={tableData}
-            pagination={{ pageSizeOptions: [10, 20, 50, 100, 1000], showSizeChanger: true,pageSize }}
+            loading
+            pagination={{ pageSizeOptions: [10, 20, 50, 100, 1000], showSizeChanger: true, pageSize }}
             request={(params, sort, filter) => getTableData(params)}
+          />} */}
+
+          {(currentComputeDate) && <KCIMTable actionRef={tableRef} rowKey='id' columns={tableColumn as ProColumns[]}
+            // params={tableDataFilterParams}
+            loading={loading}
+            scroll={{ x: tableScrollX, y: tableH }}
+            dataSource={tableData}
+            pagination={searchType == 1 ? { pageSizeOptions: [10, 20, 50, 100, 1000], showSizeChanger: true, pageSize } : {
+              ...pagination,
+              onChange(page, pageSize) {
+                getTableData({ ...tableDataFilterParams, current: page, pageSize });
+              },
+            }}
           />}
         </div>
       </div>
@@ -505,3 +684,4 @@ const ReportExport = () => {
 }
 
 export default ReportExport
+

+ 10 - 1
src/pages/reportExport/report/service.ts

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-01-04 13:59:26
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-12-24 16:34:17
+ * @LastEditTime: 2024-11-07 16:14:57
  * @FilePath: /BudgetManaSystem/src/pages/budgetMana/personnelSalaryBudget/service.ts
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -31,6 +31,15 @@ export const getData = (params:any,reportCode:string,parameter:any)=>{
 }
 
 
+export const getSearchRowsReq = (code:string)=>{
+
+    return request('/costAccount/report/getReportIndex', {
+         method:'GET',
+        params:{reportCode:code}
+    })
+}
+
+
 //获取跳转报表数据
 export const getRedirReportData = (params:any,reportCode:string,parameter:any)=>{
     return request('/costAccount/report/redirect', {

+ 33 - 7
src/pages/reportExport/report/style.less

@@ -9,6 +9,7 @@
             color: #7A8599;
             cursor: pointer;
             padding: 4px;
+
             &:hover {
                 background: #E6EAF2;
                 border-radius: 4px;
@@ -16,6 +17,7 @@
 
             &.actived {
                 color: #17181A;
+
                 &:hover {
                     cursor: default;
                     color: #17181A;
@@ -25,19 +27,20 @@
             }
         }
     }
-    
+
     .cover {
         position: fixed;
         width: 100vw;
         height: 100vh;
         z-index: 99;
-        background: rgba(41,44,51,0.5);
+        background: rgba(41, 44, 51, 0.5);
+
         .processModal {
             position: fixed;
             z-index: 99;
             width: 500px;
             height: 100px;
-            top:40%;
+            top: 40%;
             left: 50%;
             margin-top: -50px;
             margin-left: -250px;
@@ -50,7 +53,13 @@
         padding: 16px;
         border-radius: 4px;
         background: #fff;
+        .toolbar {
+            display: flex;
+            flex-direction: row;
+            justify-content: space-between;
+            align-items: center;
 
+        }
         .search {
             display: flex;
             flex-direction: row;
@@ -58,9 +67,9 @@
         }
 
         .export {
-            position: absolute;
-            top: 16px;
-            right: 16px;
+            // position: absolute;
+            // top: 16px;
+            // right: 16px;
             width: 56px;
             height: 24px;
             color: #fff;
@@ -69,9 +78,26 @@
             cursor: pointer;
             background: #3377FF;
             border-radius: 4px;
+
+        }
+
+        .searchBtn {
+            // position: absolute;
+            // top: 16px;
+            // right: 16px;
+            width: 56px;
+            height: 24px;
+            margin-right: 8px;
+            color: #17181A;
+            text-align: center;
+            line-height: 24px;
+            cursor: pointer;
+            border-radius: 4px;
+            background: #FAFCFF;
+            border: 1px solid #DAE2F2;
         }
 
-        .content {
+        .ReportTemplateContent {
             position: relative;
             padding-top: 8px;
 

+ 2 - 2
src/pages/setting/fenyeTemplate/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-10-09 14:51:33
+ * @LastEditTime: 2024-09-09 10:39:38
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -328,7 +328,7 @@ export default function FenyeTemplate() {
                 <div className='filter'>
                     <div className='filterItem' style={{ marginRight: 16, width: 205 }}>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'请输入模板名称'} allowClear
+                        <Input placeholder={'请输入模板名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 2 - 2
src/pages/setting/qualitativeOptionsMana/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-10-09 14:49:36
+ * @LastEditTime: 2024-09-09 10:37:11
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -288,7 +288,7 @@ export default function DicClassfication() {
                 <div className='filter'>
                     <div className='filterItem' style={{ marginRight: 16, width: 205 }}>
                         <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
-                        <Input placeholder={'请输入定性名称'} allowClear
+                        <Input placeholder={'请输入定性名称'} allowClear autoComplete='off'
                             suffix={
                                 <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
                             }

+ 4 - 3
src/pages/specialDataImport/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-08-16 10:02:03
+ * @LastEditTime: 2024-09-25 15:02:26
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -15,7 +15,7 @@ import { createFromIconfontCN } from '@ant-design/icons';
 import { ActionType } from '@ant-design/pro-components';
 import { ModalForm, ProFormDatePicker, ProFormSelect, ProFormText, ProFormTextArea } from '@ant-design/pro-form'
 import { ProColumns } from '@ant-design/pro-table';
-import { Input, message, Popconfirm, DatePicker } from 'antd';
+import { message, Popconfirm, DatePicker } from 'antd';
 import { useEffect, useRef, useState } from 'react'
 
 import { afterImport, getData, getSpecialImportTable, tableDataImport } from './service';
@@ -171,7 +171,7 @@ export default function DicClassfication() {
                 }}
             >
                 <div className='tip'>本操作为追加导入,会保留已有的数据并将文件的所有记录追加到数据表</div>
-                <ProFormDatePicker.Month label='所属年月' name='computeDate' width={326} rules={[{ required: true, message: '所属年月不能为空!' }]} />
+                <ProFormDatePicker.Month label='所属年月' name='computeDate' width={326} rules={[{ required: true, message: '所属年月不能为空!' }]} fieldProps={{autoComplete:'off'}} />
                 <ProFormSelect label='数据库表名称' name='tableName' width={326}
                     request={async () => {
                         const resp = await getSpecialImportTable();
@@ -208,6 +208,7 @@ export default function DicClassfication() {
                                 }}
                                 picker='month'
                                 locale={locale}
+                                autoComplete="off"
                                 defaultValue={moment(currentComputeDate, 'YYYY-MM')}
                                 format='YYYY-MM' placeholder="选择年月" />
                         </div>)}

+ 19 - 7
src/pages/static/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2024-06-06 17:23:30
+ * @LastEditTime: 2024-09-13 12:13:10
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -23,14 +23,26 @@ const IconFont = createFromIconfontCN({
 
 
 function getQueryParams() {
-  const params = new URLSearchParams(window.location.search);
-  // 例如,获取名为 "id" 的查询参数
-  const softUrl = params.get('softUrl');
-  return { softUrl };
+  const queryString = window.location.search; // 获取 location.search 的值
+
+  // 使用正则表达式匹配 softUrl 的完整值
+  const softUrlMatch = queryString.match(/softUrl=([^&]+(?:&[^=]+=true)*)/);  // 改进后的正则表达式
+
+  let softUrl = ''; // 用于存储 softUrl 的值
+
+  if (softUrlMatch) {
+    // 获取匹配到的第一个捕获组(即 softUrl 的值),并进行解码
+    softUrl = decodeURIComponent(softUrlMatch[1]);
+  }
+
+  // console.log({ softUrl, queryString, softUrlMatch }); // 打印完整的 softUrl
+
+  return { softUrl }; // 返回带有完整 softUrl 的对象
 }
 
 
 
+
 export default function StaticPage() {
 
   const [specialPageUrl, setspecialPageUrl] = useState<string | undefined>(undefined);
@@ -60,7 +72,7 @@ export default function StaticPage() {
   useEffect(() => {
     setloading(true);
     setspecialPageUrl(softUrl ? softUrl : '');
-
+    console.log({softUrl});
   }, [location]);
 
   useEffect(() => {
@@ -76,7 +88,7 @@ export default function StaticPage() {
       <Skeleton loading={loading} paragraph={{ rows: 50 }} active />
       <iframe
         onLoad={() => onLoadhandle()}
-        style={{ width: '100%', height: '90vh', border: 'none',transformOrigin:'top left',paddingLeft:100,overflow:'hidden'}}
+        style={{ width: '100%', height: 'calc(100vh - 80px)', border: 'none',overflow:'hidden'}}
         src={specialPageUrl}
       ></iframe>
     </KCIMPagecontainer>

+ 21 - 4
src/utils/tableToExcel.ts

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-05-31 11:18:30
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-09-05 15:08:17
+ * @LastEditTime: 2024-09-10 10:31:52
  * @FilePath: /BudgetManaSystem/src/utils/tableToExcel.ts
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -53,10 +53,15 @@ function getMerges(columns: Column[], startRow = 0, startCol = 0): Merge[] {
 function exportTableToExcel(tableData: DataType[], columns: Column[], fileName = 'data') {
   // 获取列标题
   const columnHeaders = columns.map(column => column.title);
-  
-  // 将列标题和表格数据合并
-  const allData = [columnHeaders as any].concat(tableData.map(row => Object.values(row)));
 
+  // 将列标题和表格数据合并
+  const allData = [columnHeaders as any].concat(
+    tableData.map(row => 
+      Object.values(row).map(value => 
+        (typeof value === 'string' ? value : value)
+      )
+    )
+  );
 
   // 获取合并项
   const merges = getMerges(columns);
@@ -70,6 +75,17 @@ function exportTableToExcel(tableData: DataType[], columns: Column[], fileName =
   // 设置合并项
   ws['!merges'] = merges;
 
+  // 自动计算列宽
+  const colWidths = allData[0].map((col: any, index: number) => {
+    const maxLength = allData.reduce((max, row) => {
+      const cellValue = row[index] ? row[index].toString() : '';
+      return Math.max(max, cellValue.length);
+    }, 0);
+    return { wch: maxLength + 2 }; // 加上额外的2个字符的宽度来提供一些空间
+  });
+
+  ws['!cols'] = colWidths;  // 设置工作表的列宽
+
   // 将工作表添加到工作簿中
   XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
 
@@ -82,4 +98,5 @@ function exportTableToExcel(tableData: DataType[], columns: Column[], fileName =
 }
 
 
+
 export default exportTableToExcel;

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
src/utils/zhongtaiC.js


BIN=BIN
static/huizong.png


BIN=BIN
static/moren.png


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio