kts-component-invoice-operate 3.1.19 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/.dumi/theme/builtins/API.tsx +66 -66
  2. package/.editorconfig +16 -16
  3. package/.fatherrc.ts +4 -4
  4. package/.prettierignore +7 -7
  5. package/.prettierrc +11 -11
  6. package/.umirc.ts +8 -8
  7. package/README.md +5 -5
  8. package/dist/Invoice/Invoice-digtal/_test/disabled/index.d.ts +4 -0
  9. package/dist/Invoice/Invoice-digtal/_test/easiest/index.d.ts +4 -0
  10. package/dist/Invoice/Invoice-digtal/_test/header/index.d.ts +4 -0
  11. package/dist/Invoice/Invoice-digtal/_test/readOnly/index.d.ts +4 -0
  12. package/dist/Invoice/Invoice-digtal/_test/stakeholder/index.d.ts +4 -0
  13. package/dist/Invoice/Invoice-digtal/_test/typeSelection/index.d.ts +4 -0
  14. package/dist/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/index.d.ts +4 -0
  15. package/dist/Invoice/InvoiceController/InvoiceControllerState/Stakeholder/index.d.ts +10 -0
  16. package/dist/Invoice/InvoiceController/InvoiceControllerState/index.d.ts +6 -0
  17. package/dist/Invoice/InvoiceController/fns/addGoodDiscount.d.ts +1 -1
  18. package/dist/Invoice/InvoiceController/fns/addGoodDiscountV2.d.ts +12 -0
  19. package/dist/Invoice/InvoiceController/fns/delGood.d.ts +1 -1
  20. package/dist/Invoice/InvoiceController/index.d.ts +2 -0
  21. package/dist/Invoice/index.d.ts +25 -12
  22. package/dist/Invoice/tools/mounting/index.d.ts +3 -0
  23. package/dist/Invoice/{ui/GoodsList/hook → tools}/useToGenerateId/index.d.ts +1 -1
  24. package/dist/Invoice/ui/{Buyer → default/Buyer}/index.d.ts +1 -1
  25. package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/autoFillFn/index.d.ts +2 -2
  26. package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.d.ts +0 -1
  27. package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.d.ts +1 -1
  28. package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/hook/useDelItem/index.d.ts +1 -1
  29. package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.d.ts +1 -1
  30. package/dist/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.d.ts +7 -0
  31. package/dist/Invoice/ui/default/GoodsList/hook/useDeduction/index.d.ts +8 -0
  32. package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useOnRow/index.d.ts +1 -1
  33. package/dist/Invoice/ui/default/GoodsList/hook/useWindowClick/index.d.ts +8 -0
  34. package/dist/Invoice/ui/{Seller → default/Seller}/index.d.ts +1 -1
  35. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/autoFillFn/index.d.ts +35 -0
  36. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/index.d.ts +3 -0
  37. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.d.ts +7 -0
  38. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowEditButton/index.d.ts +6 -0
  39. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.d.ts +4 -0
  40. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.d.ts +7 -0
  41. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.d.ts +7 -0
  42. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.d.ts +7 -0
  43. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.d.ts +7 -0
  44. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowSaveButton/index.d.ts +6 -0
  45. package/dist/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/TitleText/index.d.ts +8 -0
  46. package/dist/Invoice/ui/digtal/GoodsList/hook/useOnRow/index.d.ts +8 -0
  47. package/dist/Invoice/ui/digtal/GoodsList/hook/useRowSelection/index.d.ts +8 -0
  48. package/dist/Invoice/ui/digtal/GoodsList/hook/useWindowClick/index.d.ts +8 -0
  49. package/dist/Invoice/ui/digtal/GoodsList/index.d.ts +17 -0
  50. package/dist/Invoice/ui/digtal/GoodsList/ui/AddRowButton/index.d.ts +3 -0
  51. package/dist/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.d.ts +5 -0
  52. package/dist/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.d.ts +5 -0
  53. package/dist/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.d.ts +6 -0
  54. package/dist/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEmptyRefill/index.d.ts +6 -0
  55. package/dist/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.d.ts +6 -0
  56. package/dist/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useReselectInvoiceType/index.d.ts +5 -0
  57. package/dist/Invoice/ui/digtal/GoodsList/ui/DescribeSwitch/index.d.ts +3 -0
  58. package/dist/Invoice/ui/digtal/GoodsList/ui/Search/index.d.ts +3 -0
  59. package/dist/Invoice/ui/digtal/GoodsList/ui/Statistics/index.d.ts +4 -0
  60. package/dist/Invoice/ui/digtal/GoodsList/ui/TableRow/index.d.ts +2 -0
  61. package/dist/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.d.ts +4 -0
  62. package/dist/Invoice/ui/digtal/GoodsList/ui/TableVirtual.o/index.d.ts +4 -0
  63. package/dist/Invoice/ui/digtal/GoodsList/ui/TaxIncludedSwitch/index.d.ts +3 -0
  64. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useColumns/autoFillFn/index.d.ts +35 -0
  65. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useColumns/index.d.ts +3 -0
  66. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/ItemNameInput/index.d.ts +7 -0
  67. package/dist/Invoice/ui/{GoodsList/hook/useColumns/ui/RowMenu → digtal/GoodsList.o/hook/useColumns/ui/RowEditButton}/index.d.ts +0 -1
  68. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.d.ts +4 -0
  69. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.d.ts +7 -0
  70. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/hook/useDelItem/index.d.ts +7 -0
  71. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.d.ts +7 -0
  72. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/index.d.ts +7 -0
  73. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowSaveButton/index.d.ts +6 -0
  74. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/TitleText/index.d.ts +8 -0
  75. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useOnRow/index.d.ts +8 -0
  76. package/dist/Invoice/ui/digtal/GoodsList.o/hook/useRowSelection/index.d.ts +8 -0
  77. package/dist/Invoice/ui/digtal/GoodsList.o/index.d.ts +20 -0
  78. package/dist/Invoice/ui/digtal/GoodsList.o/ui/AddRowButton/index.d.ts +3 -0
  79. package/dist/Invoice/ui/digtal/GoodsList.o/ui/TableRow/index.d.ts +2 -0
  80. package/dist/Invoice/ui/digtal/GoodsList.o/ui/TableVirtual/index.d.ts +4 -0
  81. package/dist/Invoice/ui/digtal/InvoiceHeader/index.d.ts +14 -0
  82. package/dist/Invoice/ui/digtal/Sign/index.d.ts +10 -0
  83. package/dist/Invoice/ui/digtal/Stakeholder/index.d.ts +7 -0
  84. package/dist/InvoiceTypeModal/_test/easiest/index.d.ts +3 -0
  85. package/dist/InvoiceTypeModal/index.d.ts +34 -0
  86. package/dist/index.d.ts +2 -0
  87. package/dist/index.esm.js +10107 -2821
  88. package/dist/index.js +10101 -2814
  89. package/docs/index.md +5 -5
  90. package/docs-dist/404.html +33 -33
  91. package/docs-dist/index.html +33 -33
  92. package/docs-dist/umi.css +19 -19
  93. package/index.html +12 -12
  94. package/package.json +60 -60
  95. package/src/Invoice/Invoice-digtal/_test/disabled/index.tsx +38 -0
  96. package/src/Invoice/Invoice-digtal/_test/easiest/index.tsx +5 -0
  97. package/src/Invoice/Invoice-digtal/_test/header/index.tsx +17 -0
  98. package/src/Invoice/Invoice-digtal/_test/readOnly/index.tsx +42 -0
  99. package/src/Invoice/Invoice-digtal/_test/stakeholder/index.tsx +12 -0
  100. package/src/Invoice/Invoice-digtal/_test/typeSelection/index.tsx +29 -0
  101. package/src/Invoice/Invoice-digtal/index.md +19 -0
  102. package/src/Invoice/InvoiceController/InvoiceControllerForm/index.ts +94 -94
  103. package/src/Invoice/InvoiceController/InvoiceControllerState/BuyerState/index.tsx +88 -88
  104. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/EndowCode/index.tsx +93 -93
  105. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IColumnsReplenish/index.ts +10 -10
  106. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IGood/index.ts +75 -75
  107. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ImportGoods/index.ts +80 -80
  108. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/LineAttributeType/index.ts +5 -5
  109. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ProductComparison/index.ts +9 -9
  110. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/index.ts +94 -88
  111. package/src/Invoice/InvoiceController/InvoiceControllerState/Stakeholder/index.ts +11 -0
  112. package/src/Invoice/InvoiceController/InvoiceControllerState/index.ts +56 -48
  113. package/src/Invoice/InvoiceController/fns/addGood.ts +11 -11
  114. package/src/Invoice/InvoiceController/fns/addGoodDiscount.ts +125 -125
  115. package/src/Invoice/InvoiceController/fns/addGoodDiscountV2.ts +84 -0
  116. package/src/Invoice/InvoiceController/fns/delGood.ts +41 -43
  117. package/src/Invoice/InvoiceController/fns/getGoodsSearch.ts +23 -23
  118. package/src/Invoice/InvoiceController/fns/saveEditGood.ts +24 -23
  119. package/src/Invoice/InvoiceController/fns/setEditGood.ts +16 -16
  120. package/src/Invoice/InvoiceController/fns/setGoods.ts +10 -10
  121. package/src/Invoice/InvoiceController/fns/updateInvoiceNo.ts +8 -8
  122. package/src/Invoice/InvoiceController/index.ts +65 -61
  123. package/src/Invoice/_test/buyerNameSearch/index.tsx +41 -41
  124. package/src/Invoice/_test/deduction/index.tsx +935 -935
  125. package/src/Invoice/_test/draft/index.tsx +40 -40
  126. package/src/Invoice/_test/easiest/index.tsx +5 -5
  127. package/src/Invoice/_test/endowCode/index.tsx +1095 -1095
  128. package/src/Invoice/_test/goodsMenuExpand/index.tsx +32 -32
  129. package/src/Invoice/_test/importBuyer/index.tsx +74 -74
  130. package/src/Invoice/_test/importGoods/index.tsx +515 -515
  131. package/src/Invoice/_test/invoiceType/index.tsx +59 -59
  132. package/src/Invoice/_test/isInvoiceNo/index.tsx +12 -12
  133. package/src/Invoice/_test/replaceHead/index.tsx +22 -22
  134. package/src/Invoice/_test/retrieveData/index.tsx +22 -22
  135. package/src/Invoice/_test/seller/index.tsx +28 -28
  136. package/src/Invoice/_test/setDataSource/index.tsx +22 -22
  137. package/src/Invoice/_test/unit/index.tsx +19 -19
  138. package/src/Invoice/index.less +30 -12
  139. package/src/Invoice/index.md +53 -53
  140. package/src/Invoice/index.tsx +164 -109
  141. package/src/Invoice/tools/calculate/index.ts +112 -112
  142. package/src/Invoice/tools/coolingFn/index.ts +17 -17
  143. package/src/Invoice/tools/evaluate/index.ts +7 -7
  144. package/src/Invoice/tools/idGenerator/index.ts +2 -2
  145. package/src/Invoice/tools/itemName/index.ts +55 -55
  146. package/src/Invoice/tools/lazyFn/index.ts +19 -19
  147. package/src/Invoice/tools/mounting/index.ts +14 -0
  148. package/src/Invoice/tools/strringFn/index.ts +40 -40
  149. package/src/Invoice/{ui/GoodsList/hook → tools}/useToGenerateId/index.ts +8 -8
  150. package/src/Invoice/ui/{AddComparisonDrawer → default/AddComparisonDrawer}/index.tsx +149 -149
  151. package/src/Invoice/ui/{Buyer → default/Buyer}/index.less +219 -219
  152. package/src/Invoice/ui/{Buyer → default/Buyer}/index.tsx +114 -114
  153. package/src/Invoice/ui/{Buyer → default/Buyer}/ui/BuyerNameInput/index.tsx +166 -166
  154. package/src/Invoice/ui/{Buyer → default/Buyer}/ui/ImportBuyerButton/index.tsx +21 -21
  155. package/src/Invoice/ui/{EndowCodeDrawer → default/EndowCodeDrawer}/index.less +8 -8
  156. package/src/Invoice/ui/{EndowCodeDrawer → default/EndowCodeDrawer}/index.tsx +431 -431
  157. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/autoFillFn/index.ts +519 -519
  158. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/index.tsx +620 -620
  159. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/ItemNameInput/index.less +9 -9
  160. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/ItemNameInput/index.tsx +19 -19
  161. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  162. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  163. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +76 -76
  164. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -35
  165. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +34 -34
  166. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/index.less +13 -13
  167. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/index.tsx +98 -98
  168. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  169. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/TitleText/index.tsx +20 -20
  170. package/src/Invoice/ui/default/GoodsList/hook/useDeduction/index.tsx +24 -0
  171. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useOnRow/index.tsx +39 -39
  172. package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useRowSelection/index.tsx +111 -111
  173. package/src/Invoice/ui/default/GoodsList/hook/useWindowClick/index.tsx +23 -0
  174. package/src/Invoice/ui/{GoodsList → default/GoodsList}/index.less +177 -177
  175. package/src/Invoice/ui/{GoodsList → default/GoodsList}/index.tsx +177 -177
  176. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/AddRowButton/index.tsx +65 -61
  177. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/hooks/useAddDiscountRowButton/index.less +21 -21
  178. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +244 -244
  179. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  180. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/hooks/useDelRowButton/index.tsx +69 -66
  181. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +58 -58
  182. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/index.tsx +37 -37
  183. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/DescribeSwitch/index.tsx +36 -36
  184. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/Search/index.less +10 -10
  185. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/Search/index.tsx +50 -50
  186. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/Statistics/index.less +18 -18
  187. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/Statistics/index.tsx +109 -109
  188. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/TableRow/index.tsx +27 -27
  189. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/TableVirtual/index.less +38 -38
  190. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/TableVirtual/index.tsx +108 -108
  191. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/TableVirtual.o/index.less +44 -44
  192. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/TableVirtual.o/index.tsx +96 -96
  193. package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/TaxIncludedSwitch/index.tsx +30 -30
  194. package/src/Invoice/ui/{ImportBuyerDrawer → default/ImportBuyerDrawer}/index.tsx +75 -75
  195. package/src/Invoice/ui/{ImportGoodsDrawer → default/ImportGoodsDrawer}/index.tsx +170 -170
  196. package/src/Invoice/ui/{InvoiceHeader → default/InvoiceHeader}/index.less +68 -68
  197. package/src/Invoice/ui/{InvoiceHeader → default/InvoiceHeader}/index.tsx +246 -246
  198. package/src/Invoice/ui/{Seller → default/Seller}/index.less +113 -113
  199. package/src/Invoice/ui/{Seller → default/Seller}/index.tsx +98 -98
  200. package/src/Invoice/ui/{Sign → default/Sign}/index.less +14 -14
  201. package/src/Invoice/ui/{Sign → default/Sign}/index.tsx +71 -71
  202. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/autoFillFn/index.ts +520 -0
  203. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/index.tsx +623 -0
  204. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +10 -0
  205. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +19 -0
  206. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -0
  207. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -0
  208. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +76 -0
  209. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -0
  210. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +34 -0
  211. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -0
  212. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +98 -0
  213. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/spot.svg +1 -0
  214. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -0
  215. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -0
  216. package/src/Invoice/ui/digtal/GoodsList/hook/useOnRow/index.tsx +39 -0
  217. package/src/Invoice/ui/digtal/GoodsList/hook/useRowSelection/index.tsx +112 -0
  218. package/src/Invoice/ui/digtal/GoodsList/hook/useWindowClick/index.tsx +23 -0
  219. package/src/Invoice/ui/digtal/GoodsList/index.less +57 -0
  220. package/src/Invoice/ui/digtal/GoodsList/index.tsx +181 -0
  221. package/src/Invoice/ui/digtal/GoodsList/ui/AddRowButton/index.tsx +66 -0
  222. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +321 -0
  223. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/svg/add.svg +12 -0
  224. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -0
  225. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -0
  226. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +35 -0
  227. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +82 -0
  228. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useReselectInvoiceType/index.tsx +56 -0
  229. package/src/Invoice/ui/digtal/GoodsList/ui/DescribeSwitch/index.tsx +37 -0
  230. package/src/Invoice/ui/digtal/GoodsList/ui/Search/icon/magnifier.svg +1 -0
  231. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.less +12 -0
  232. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.tsx +50 -0
  233. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.less +54 -0
  234. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.tsx +99 -0
  235. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/svg/fork.svg +12 -0
  236. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.tsx +28 -0
  237. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.less +39 -0
  238. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.tsx +109 -0
  239. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual.o/index.less +44 -0
  240. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual.o/index.tsx +96 -0
  241. package/src/Invoice/ui/digtal/GoodsList/ui/TaxIncludedSwitch/index.tsx +31 -0
  242. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/autoFillFn/index.ts +520 -0
  243. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/index.tsx +624 -0
  244. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/ItemNameInput/index.less +10 -0
  245. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/ItemNameInput/index.tsx +19 -0
  246. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowEditButton/index.tsx +30 -0
  247. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -0
  248. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +76 -0
  249. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -0
  250. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +34 -0
  251. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/index.less +13 -0
  252. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/index.tsx +98 -0
  253. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowMenu/spot.svg +1 -0
  254. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/RowSaveButton/index.tsx +14 -0
  255. package/src/Invoice/ui/digtal/GoodsList.o/hook/useColumns/ui/TitleText/index.tsx +20 -0
  256. package/src/Invoice/ui/{GoodsList → digtal/GoodsList.o}/hook/useDeduction/index.tsx +24 -24
  257. package/src/Invoice/ui/digtal/GoodsList.o/hook/useOnRow/index.tsx +39 -0
  258. package/src/Invoice/ui/digtal/GoodsList.o/hook/useRowSelection/index.tsx +112 -0
  259. package/src/Invoice/ui/{GoodsList → digtal/GoodsList.o}/hook/useWindowClick/index.tsx +23 -23
  260. package/src/Invoice/ui/digtal/GoodsList.o/index.less +7 -0
  261. package/src/Invoice/ui/digtal/GoodsList.o/index.tsx +132 -0
  262. package/src/Invoice/ui/digtal/GoodsList.o/ui/AddRowButton/index.tsx +66 -0
  263. package/src/Invoice/ui/digtal/GoodsList.o/ui/TableRow/index.tsx +28 -0
  264. package/src/Invoice/ui/digtal/GoodsList.o/ui/TableVirtual/index.less +43 -0
  265. package/src/Invoice/ui/digtal/GoodsList.o/ui/TableVirtual/index.tsx +109 -0
  266. package/src/Invoice/ui/digtal/InvoiceHeader/index.less +58 -0
  267. package/src/Invoice/ui/digtal/InvoiceHeader/index.tsx +77 -0
  268. package/src/Invoice/ui/digtal/Sign/index.less +49 -0
  269. package/src/Invoice/ui/digtal/Sign/index.tsx +90 -0
  270. package/src/Invoice/ui/digtal/Stakeholder/index.less +57 -0
  271. package/src/Invoice/ui/digtal/Stakeholder/index.tsx +237 -0
  272. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowDown.svg +3 -0
  273. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowUp.svg +3 -0
  274. package/src/InvoiceTypeModal/_test/easiest/index.tsx +32 -0
  275. package/src/InvoiceTypeModal/index.less +8 -0
  276. package/src/InvoiceTypeModal/index.md +6 -0
  277. package/src/InvoiceTypeModal/index.tsx +123 -0
  278. package/src/index.ts +9 -6
  279. package/tsconfig.json +31 -31
  280. package/typings.d.ts +3 -3
  281. package/yarn.e.lock +14331 -14331
  282. package/yarn.o.lock +14800 -14800
  283. /package/dist/Invoice/ui/{AddComparisonDrawer → default/AddComparisonDrawer}/index.d.ts +0 -0
  284. /package/dist/Invoice/ui/{Buyer → default/Buyer}/ui/BuyerNameInput/index.d.ts +0 -0
  285. /package/dist/Invoice/ui/{Buyer → default/Buyer}/ui/ImportBuyerButton/index.d.ts +0 -0
  286. /package/dist/Invoice/ui/{EndowCodeDrawer → default/EndowCodeDrawer}/index.d.ts +0 -0
  287. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/index.d.ts +0 -0
  288. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/ItemNameInput/index.d.ts +0 -0
  289. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowEditButton/index.d.ts +0 -0
  290. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowSaveButton/index.d.ts +0 -0
  291. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/TitleText/index.d.ts +0 -0
  292. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/hook/useRowSelection/index.d.ts +0 -0
  293. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/index.d.ts +0 -0
  294. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/AddRowButton/index.d.ts +0 -0
  295. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/hooks/useAddDiscountRowButton/index.d.ts +0 -0
  296. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/hooks/useCommodityComparisonButton/index.d.ts +0 -0
  297. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/hooks/useDelRowButton/index.d.ts +0 -0
  298. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/hooks/useEndowCodeButton/index.d.ts +0 -0
  299. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/BulkMenu/index.d.ts +0 -0
  300. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/DescribeSwitch/index.d.ts +0 -0
  301. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/Search/index.d.ts +0 -0
  302. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/Statistics/index.d.ts +0 -0
  303. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/TableRow/index.d.ts +0 -0
  304. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/TableVirtual/index.d.ts +0 -0
  305. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/TableVirtual.o/index.d.ts +0 -0
  306. /package/dist/Invoice/ui/{GoodsList → default/GoodsList}/ui/TaxIncludedSwitch/index.d.ts +0 -0
  307. /package/dist/Invoice/ui/{ImportBuyerDrawer → default/ImportBuyerDrawer}/index.d.ts +0 -0
  308. /package/dist/Invoice/ui/{ImportGoodsDrawer → default/ImportGoodsDrawer}/index.d.ts +0 -0
  309. /package/dist/Invoice/ui/{InvoiceHeader → default/InvoiceHeader}/index.d.ts +0 -0
  310. /package/dist/Invoice/ui/{Sign → default/Sign}/index.d.ts +0 -0
  311. /package/dist/Invoice/ui/{GoodsList → digtal/GoodsList.o}/hook/useDeduction/index.d.ts +0 -0
  312. /package/dist/Invoice/ui/{GoodsList → digtal/GoodsList.o}/hook/useWindowClick/index.d.ts +0 -0
  313. /package/src/Invoice/ui/{GoodsList → default/GoodsList}/hook/useColumns/ui/RowMenu/spot.svg +0 -0
  314. /package/src/Invoice/ui/{GoodsList → default/GoodsList}/ui/Search/icon/magnifier.svg +0 -0
  315. /package/src/Invoice/ui/{InvoiceHeader → default/InvoiceHeader}/auto.svg +0 -0
@@ -0,0 +1,44 @@
1
+ .kts-invoice-operate-goods-table-virtual {
2
+ .ktsAnt3x-table-placeholder {
3
+ position: absolute;
4
+ top: 50px;
5
+ left: 0;
6
+ width: 100%;
7
+ border: none;
8
+ }
9
+
10
+ .ktsAnt3x-table {
11
+ font-size: 12px;
12
+ border: none;
13
+ border-radius: 0;
14
+
15
+ .ktsAnt3x-table-content {
16
+ border-right: none;
17
+
18
+ .ktsAnt3x-table-body {
19
+ margin: 0;
20
+
21
+ table {
22
+ position: absolute;
23
+ top: 0;
24
+ left: 0;
25
+ border-bottom: 1px solid #e8e8e8;
26
+
27
+ tr {
28
+ height: 32px;
29
+ }
30
+
31
+ tr:hover {
32
+ td{
33
+ background: none;
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+
40
+ .ktsAnt3x-table-thead>tr {
41
+ background-color: #f6f7f9;
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,96 @@
1
+ import React from 'react';
2
+ import { Table } from 'kts-components-antd-x3';
3
+ import { TableProps } from 'kts-components-antd-x3/lib/table/interface';
4
+ import './index.less';
5
+
6
+ export default function <T = any>(props: TableProps<T>) {
7
+ const [self, setSelf] = React.useState<HTMLSpanElement | null>(null);
8
+
9
+ const tableBody = React.useMemo(() => {
10
+ if (!self) return;
11
+ return self.querySelector('.ktsAnt3x-table .ktsAnt3x-table-content .ktsAnt3x-table-body') as HTMLDivElement;
12
+ }, [self]);
13
+
14
+ /** 显示指针 */
15
+ const [pointer, setPointer] = React.useState(0);
16
+
17
+ /** 行高 */
18
+ const rowHeight = React.useMemo(() => {
19
+ if (!self) return 33;
20
+
21
+ const td = self.querySelector('.ktsAnt3x-table-tbody td');
22
+ if (!td) return 33;
23
+
24
+ return td.clientHeight;
25
+ }, [self, props.dataSource]);
26
+
27
+ /** 间隔容器 */
28
+ const placeholder = React.useMemo(() => {
29
+ if (!self || !tableBody) return;
30
+ let placeholder = tableBody.querySelector(
31
+ '.table-virtual-placeholder',
32
+ ) as HTMLDivElement;
33
+ if (!placeholder) {
34
+ placeholder = document.createElement('div');
35
+ placeholder.className = 'table-virtual-placeholder';
36
+ tableBody.appendChild(placeholder);
37
+ }
38
+ return placeholder;
39
+ }, [self, tableBody]);
40
+
41
+ // 设置占位dom的搞
42
+ const placeholderHeight = React.useMemo(() => {
43
+ if (!self || !rowHeight || !props.dataSource || !placeholder) return;
44
+ const placeholderHeight = rowHeight * props.dataSource.length;
45
+ placeholder.style.height = `${placeholderHeight}px`;
46
+ return placeholderHeight;
47
+ }, [self, rowHeight, props.dataSource, placeholder]);
48
+
49
+ /** 可以容纳的行数 */
50
+ const rowSize = React.useMemo(() => {
51
+ if (!tableBody! || !rowHeight) return 0;
52
+ return Math.ceil(tableBody.clientHeight / rowHeight);
53
+ }, [tableBody, rowHeight, placeholderHeight]);
54
+
55
+ // 计算渲染的行
56
+ const dataSource = React.useMemo(() => {
57
+ if (!props.dataSource) return [];
58
+ if (props.dataSource.length < 10) return props.dataSource;
59
+
60
+ if (!rowSize) return [props.dataSource[0]];
61
+ return props.dataSource?.slice(pointer, pointer + 2 * rowSize);
62
+ }, [props.dataSource, pointer, rowSize]);
63
+
64
+ // 监听滚动
65
+ React.useEffect(() => {
66
+ if (!self || !placeholder || !props.dataSource || !rowHeight || !tableBody)
67
+ return;
68
+
69
+ const onScroll = () => {
70
+ if (!props.dataSource || !tableBody) return;
71
+ setPointer(Math.floor((props.dataSource.length - rowSize) * (tableBody.scrollTop / (placeholder.clientHeight - tableBody.clientHeight))));
72
+ };
73
+ onScroll();
74
+
75
+ tableBody.addEventListener('scroll', onScroll);
76
+ return () => {
77
+ tableBody.removeEventListener('scroll', onScroll);
78
+ };
79
+ }, [self, placeholder, props.dataSource, rowHeight, rowSize]);
80
+
81
+ // 移动列表
82
+ React.useEffect(() => {
83
+ if (!self) return;
84
+
85
+ const table = self.querySelector('.ktsAnt3x-table .ktsAnt3x-table-content .ktsAnt3x-table-body table') as HTMLDivElement;
86
+ if (!table) return;
87
+
88
+ table.style.top = `${pointer * rowHeight}px`;
89
+ }, [pointer, self, rowHeight]);
90
+
91
+ return (
92
+ <span className="kts-invoice-operate-goods-table-virtual" ref={(e) => { setSelf(e) }} >
93
+ <Table {...props} dataSource={dataSource} />
94
+ </span>
95
+ );
96
+ }
@@ -0,0 +1,31 @@
1
+
2
+ import React from 'react';
3
+ import { Switch } from 'kts-xui';
4
+ import Invoice from '../../../../..';
5
+
6
+ export default () => {
7
+
8
+ const controller = Invoice.useInvoiceController();
9
+
10
+ /** 是否含税 */
11
+ const isTaxIncluded = controller.useMemo(e => e.goodsListState.isTaxIncluded, []);
12
+
13
+ /** 是否可以切换(含税/不含税)状态 */
14
+ const isSwitchTax = controller.useMemo(e => e.goodsListState.isSwitchTax, []);
15
+
16
+ const onChange = React.useCallback(e => {
17
+ controller.pipeline(async s => { s.goodsListState = { ...s.goodsListState, isTaxIncluded: e } })();
18
+ }, [])
19
+
20
+ return (
21
+ <span>
22
+ <label style={{ marginRight: 2 }}>含税</label>
23
+ <Switch
24
+ disabled={isSwitchTax === false}
25
+ checked={isTaxIncluded}
26
+ defaultChecked
27
+ onChange={onChange}
28
+ />
29
+ </span>
30
+ )
31
+ }
@@ -0,0 +1,520 @@
1
+ /**
2
+ * 数量 保留15位数字
3
+ * 单价 保留15位数字
4
+ * 金额 小数点后 2位
5
+ * 税额 小数点后 2位
6
+ */
7
+ import { WrappedFormUtils } from 'kts-components-antd-x3/lib/form/Form';
8
+ import InvoiceController, { IGood, LineAttributeType } from '../../../../../../InvoiceController';
9
+ import evaluate from '../../../../../../tools/evaluate';
10
+ import { message } from 'kts-components-antd-x3'
11
+ import { format2, format15, countTaxAmount, countAmountExcludeTax, countPrice } from '../../../../../../tools/calculate';
12
+ import moment from 'moment';
13
+
14
+ export { format2, format15 } from '../../../../../../tools/calculate';
15
+
16
+
17
+
18
+ /** 延迟函数 */
19
+ const lazyFn = (fn: Function, delayed: number = 200) => {
20
+ let timer: any;
21
+ return (...par: any[]) => {
22
+ clearTimeout(timer);
23
+ timer = setTimeout(() => {
24
+ timer = undefined;
25
+ fn.apply(null, par);
26
+ }, delayed);
27
+ };
28
+ };
29
+
30
+ let promptErrV: any = {}
31
+
32
+ /** 提示错误 */
33
+ const promptErr = (err: any) => {
34
+ if (!err) return false;
35
+ if (err.errors[0].message === 'lineAmountIncludeTax need to revalidate') return true;
36
+ if (err.errors[0].message === 'lineAmountExcludeTax need to revalidate') return true;
37
+ if (err.errors[0].message === 'priceIncludeTax need to revalidate') return true;
38
+ if (err.errors[0].message === 'priceExcludeTax need to revalidate') return true;
39
+
40
+ if (new Date().getTime() - promptErrV.t > 2000 || err.errors[0].message !== promptErrV.m) {
41
+ promptErrV.t = new Date().getTime();
42
+ promptErrV.m = err.errors[0].message;
43
+ message.error({ content: err.errors[0].message, duration: 2 });
44
+ }
45
+
46
+ return true;
47
+ }
48
+
49
+ /** 清除计算中启动字段 */
50
+ export const clearCalculatingField = async (controller: InvoiceController) => controller.run(async s => s.calculatingField = '');
51
+
52
+ /** 数量改变了 */
53
+ export const onChangeQuantity = lazyFn(
54
+ (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
55
+ form.validateFields(async (err, values) => {
56
+ err = err || {};
57
+
58
+ if (!values.quantity && values.quantity !== 0) {
59
+ await controller.setEditGood({ quantity: undefined });
60
+ await clearCalculatingField(controller);
61
+ return;
62
+ }
63
+ if (err.quantity) {
64
+ await clearCalculatingField(controller);
65
+ return
66
+ };
67
+
68
+ const calculatingDigits = controller.state.calculatingDigits;
69
+ const quantity = format15(values.quantity, calculatingDigits);
70
+ await controller.setEditGood({ quantity });
71
+ form.setFieldsValue({ quantity });
72
+
73
+ // 是否含税
74
+ if (controller.state.goodsListState.isTaxIncluded) {
75
+ // 含税
76
+ if (!err.priceIncludeTax && values.priceIncludeTax) {
77
+ // 可以找到 单价(含税)
78
+ const priceIncludeTax = format15(values.priceIncludeTax, calculatingDigits);
79
+ const lineAmountIncludeTax = format2(evaluate(`${priceIncludeTax} * ${quantity}`));
80
+ form.setFieldsValue({ lineAmountIncludeTax });
81
+ await controller.setEditGood({ lineAmountIncludeTax });
82
+ } else if (!err.lineAmountIncludeTax && values.lineAmountIncludeTax) {
83
+ // 可以找到 金额(含税)
84
+ const lineAmountIncludeTax = format2(values.lineAmountIncludeTax);
85
+ const priceIncludeTax = format15(
86
+ evaluate(`${lineAmountIncludeTax} / ${quantity}`),
87
+ calculatingDigits);
88
+ form.setFieldsValue({ priceIncludeTax });
89
+ await controller.setEditGood({ priceIncludeTax });
90
+ }
91
+
92
+ // 更新不含税
93
+ await updateUnitPriceExcludingTax(controller, form, record);
94
+ } else {
95
+ // 不含税
96
+ if (!err.priceExcludeTax && values.priceExcludeTax) {
97
+ const priceExcludeTax = format15(values.priceExcludeTax, calculatingDigits);
98
+ const lineAmountExcludeTax = format2(evaluate(`${quantity} * ${priceExcludeTax}`));
99
+ form.setFieldsValue({ lineAmountExcludeTax });
100
+ await controller.setEditGood({ lineAmountExcludeTax, quantity });
101
+ } else if (!err.lineAmountExcludeTax && values.lineAmountExcludeTax) {
102
+ const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
103
+ const priceExcludeTax = format15(evaluate(`${lineAmountExcludeTax} / ${quantity}`), calculatingDigits);
104
+ form.setFieldsValue({ priceExcludeTax });
105
+ await controller.setEditGood({ priceExcludeTax, quantity });
106
+ }
107
+
108
+ // 更新含税
109
+ await updateUnitPriceTax(controller, form, record);
110
+ }
111
+
112
+ // 清楚 计算中启动字段
113
+ await clearCalculatingField(controller);
114
+ });
115
+ },
116
+ 1000,
117
+ );
118
+
119
+ /** 单价(含税) */
120
+ export const onChangePriceIncludeTax = lazyFn(
121
+ (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
122
+ form.validateFields(async (err, values) => {
123
+ err = err || {};
124
+
125
+ if (!values.priceIncludeTax && values.priceIncludeTax !== 0) {
126
+ await controller.setEditGood({ priceIncludeTax: undefined, priceExcludeTax: undefined });
127
+ await clearCalculatingField(controller);
128
+ return;
129
+ }
130
+ if (err.priceIncludeTax) {
131
+ await clearCalculatingField(controller);
132
+ return;
133
+ }
134
+
135
+ const calculatingDigits = controller.state.calculatingDigits;
136
+ const priceIncludeTax = format15(values.priceIncludeTax, calculatingDigits);
137
+ await controller.setEditGood({ priceIncludeTax });
138
+ form.setFieldsValue({ priceIncludeTax });
139
+
140
+ // 是否有数量
141
+ if (!err.quantity && values.quantity) {
142
+ const quantity = format15(values.quantity, calculatingDigits);
143
+ const lineAmountIncludeTax = format2(evaluate(`${quantity} * ${priceIncludeTax}`));
144
+ form.setFieldsValue({ lineAmountIncludeTax });
145
+ await controller.setEditGood({ lineAmountIncludeTax });
146
+ } else if (!err.lineAmountIncludeTax && values.lineAmountIncludeTax) {
147
+ const lineAmountIncludeTax = format2(values.lineAmountIncludeTax);
148
+ const quantity = format15(evaluate(`${lineAmountIncludeTax} / ${priceIncludeTax}`), calculatingDigits);
149
+ form.setFieldsValue({ quantity });
150
+ await controller.setEditGood({ quantity });
151
+ }
152
+
153
+ // 更新不含税
154
+ await updateUnitPriceExcludingTax(controller, form, record);
155
+
156
+ // 清楚 计算中启动字段
157
+ await clearCalculatingField(controller);
158
+ });
159
+ },
160
+ 1000,
161
+ );
162
+
163
+ /** 单价(不含税) */
164
+ export const onChangePriceExcludeTax = lazyFn(
165
+ (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
166
+ form.validateFields(async (err, values) => {
167
+ err = err || {};
168
+
169
+ if (!values.priceExcludeTax && values.priceExcludeTax !== 0) {
170
+ await controller.setEditGood({ priceIncludeTax: undefined, priceExcludeTax: undefined });
171
+ await clearCalculatingField(controller);
172
+ return;
173
+ }
174
+ if (err.priceExcludeTax) {
175
+ await clearCalculatingField(controller);
176
+ return;
177
+ }
178
+
179
+ const calculatingDigits = controller.state.calculatingDigits;
180
+ const priceExcludeTax = format15(values.priceExcludeTax, calculatingDigits);
181
+ await controller.setEditGood({ priceExcludeTax });
182
+ form.setFieldsValue({ priceExcludeTax });
183
+
184
+ // 是否有数量
185
+ if (!err.quantity && values.quantity) {
186
+ const quantity = format15(values.quantity, calculatingDigits);
187
+ const lineAmountExcludeTax = format2(evaluate(`${quantity} * ${priceExcludeTax}`));
188
+ form.setFieldsValue({ lineAmountExcludeTax });
189
+ await controller.setEditGood({ lineAmountExcludeTax });
190
+ } else if (!err.lineAmountExcludeTax && values.lineAmountExcludeTax) {
191
+ const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
192
+ const quantity = format15(
193
+ evaluate(`${lineAmountExcludeTax} / ${priceExcludeTax}`),
194
+ calculatingDigits
195
+ );
196
+ form.setFieldsValue({ quantity });
197
+ await controller.setEditGood({ quantity });
198
+ }
199
+
200
+ // 更新含税
201
+ await updateUnitPriceTax(controller, form, record);
202
+
203
+ // 清楚 计算中启动字段
204
+ await clearCalculatingField(controller);
205
+ });
206
+ },
207
+ 1000,
208
+ );
209
+
210
+ /** 金额(含税) */
211
+ export const onChangeLineAmountIncludeTax = lazyFn(
212
+ (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
213
+ form.validateFields(async (err, values) => {
214
+
215
+ err = err || {};
216
+ if (promptErr(err.lineAmountIncludeTax) || !values.lineAmountIncludeTax) {
217
+ // 更新不含税
218
+ await controller.setEditGood({ lineAmountIncludeTax: undefined, lineAmountExcludeTax: undefined });
219
+ await updateUnitPriceExcludingTax(controller, form, record);
220
+ await clearCalculatingField(controller);
221
+ return;
222
+ }
223
+
224
+ const calculatingDigits = controller.state.calculatingDigits;
225
+ const lineAmountIncludeTax = format2(values.lineAmountIncludeTax);
226
+ await controller.setEditGood({ lineAmountIncludeTax });
227
+ form.setFieldsValue({ lineAmountIncludeTax });
228
+
229
+ // 是否有数量
230
+ if (!err.quantity && values.quantity) {
231
+ const quantity = format15(values.quantity, calculatingDigits);
232
+ const priceIncludeTax = format15(evaluate(`${lineAmountIncludeTax} / ${quantity}`), calculatingDigits);
233
+ form.setFieldsValue({ priceIncludeTax });
234
+ await controller.setEditGood({ priceIncludeTax });
235
+ } else if (!err.priceIncludeTax && (values.priceIncludeTax || values.priceIncludeTax === 0)) {
236
+ const priceIncludeTax = format15(values.priceIncludeTax, calculatingDigits);
237
+ const quantity = format15(evaluate(`${lineAmountIncludeTax} / ${priceIncludeTax}`), calculatingDigits);
238
+ form.setFieldsValue({ quantity });
239
+ await controller.setEditGood({ quantity });
240
+ }
241
+
242
+ // 更新不含税
243
+ await updateUnitPriceExcludingTax(controller, form, record);
244
+
245
+ // 清楚 计算中启动字段
246
+ await clearCalculatingField(controller);
247
+ });
248
+ },
249
+ 1000,
250
+ );
251
+
252
+ /** 金额(不含税) */
253
+ export const onChangeLineAmountExcludeTax = lazyFn(
254
+ (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
255
+ form.validateFields(async (err, values) => {
256
+ err = err || {};
257
+ if (promptErr(err.lineAmountExcludeTax) || !values.lineAmountExcludeTax) {
258
+ // 更新含税
259
+ await controller.setEditGood({ lineAmountIncludeTax: undefined, lineAmountExcludeTax: undefined });
260
+ await updateUnitPriceTax(controller, form, record);
261
+ await clearCalculatingField(controller);
262
+ return;
263
+ }
264
+ const calculatingDigits = controller.state.calculatingDigits;
265
+ const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
266
+ await controller.setEditGood({ lineAmountExcludeTax });
267
+ form.setFieldsValue({ lineAmountExcludeTax });
268
+
269
+ // 是否有数量
270
+ if (!err.quantity && values.quantity) {
271
+ const quantity = format15(values.quantity, calculatingDigits);
272
+ const priceExcludeTax = format15(evaluate(`${lineAmountExcludeTax} / ${quantity}`), calculatingDigits);
273
+ form.setFieldsValue({ priceExcludeTax });
274
+ await controller.setEditGood({ priceExcludeTax });
275
+ } else if (!err.priceExcludeTax && values.priceExcludeTax) {
276
+ const priceExcludeTax = format15(values.priceExcludeTax, calculatingDigits);
277
+ const quantity = format15(evaluate(`${lineAmountExcludeTax} / ${priceExcludeTax}`), calculatingDigits);
278
+ form.setFieldsValue({ quantity });
279
+ await controller.setEditGood({ quantity });
280
+ }
281
+
282
+ // 更新含税
283
+ await updateUnitPriceTax(controller, form, record);
284
+
285
+ // 清楚 计算中启动字段
286
+ await clearCalculatingField(controller);
287
+ });
288
+ },
289
+ 1000,
290
+ );
291
+
292
+ /** 税率 */
293
+ export const onChangeTaxRate = lazyFn(
294
+ (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
295
+
296
+ form.validateFields(async (err, values) => {
297
+ err = err || {};
298
+ if (promptErr(err.taxRate) || (!values.taxRate && values.taxRate !== 0)) return;
299
+
300
+ let taxRate = parseFloat(values.taxRate);
301
+ await controller.setEditGood({ taxRate });
302
+
303
+ // 去掉赋码
304
+ (() => {
305
+ const cache = controller.state.goodsListState.endowCode.cache;
306
+ const record = controller.state.goodsListState.editGood;
307
+ if (record && cache[record.$index]) {
308
+ record.favouredPolicyName = cache[record.$index].favouredPolicyName;
309
+ record.favouredPolicyMark = cache[record.$index].favouredPolicyMark;
310
+ record.taxFreeType = cache[record.$index].taxFreeType;
311
+ cache[record.$index] = undefined;
312
+ }
313
+ })()
314
+
315
+ // 是否含税
316
+ if (controller.state.goodsListState.isTaxIncluded) {
317
+ await updateUnitPriceExcludingTax(controller, form, record);
318
+ } else {
319
+ await updateUnitPriceTax(controller, form, record);
320
+ }
321
+
322
+ // 清楚 计算中启动字段
323
+ await clearCalculatingField(controller);
324
+ });
325
+ },
326
+ 1000,
327
+ );
328
+
329
+ /** 小规模纳税人 1% 和 3% 自动赋码免税 */
330
+ export function dutyFree(controller: InvoiceController, taxRate: number, form: WrappedFormUtils<any>, record: IGood) {
331
+
332
+ const cache = controller.state.goodsListState.endowCode.cache;
333
+ const invoiceType = controller.state.invoiceType;
334
+
335
+ // 4月1日至12月31日
336
+ console.log('===> 小规模纳税人免税逻辑');
337
+ console.log('===> invoiceType', invoiceType);
338
+ console.log('===> en', controller.state.en);
339
+ console.log('===> taxRate', taxRate);
340
+ console.log('===> state', controller.state);
341
+
342
+ if (moment().valueOf() > moment('2022-12-31 23:59').valueOf()) return taxRate;
343
+ if (controller.state.en !== '08') return taxRate;
344
+ if (invoiceType !== '10' && invoiceType !== '04') return taxRate;
345
+
346
+ if (taxRate === 1 || taxRate === 3) {
347
+ cache[record.$index] = { favouredPolicyName: record.favouredPolicyName, favouredPolicyMark: record.favouredPolicyMark, taxFreeType: record.taxFreeType }
348
+ record.favouredPolicyName = '免税';
349
+ record.taxRate = 0;
350
+ record.favouredPolicyMark = 1;
351
+ record.taxFreeType = 1 as any;
352
+ form.setFieldsValue({ taxRate: 0 });
353
+ return 0;
354
+ }
355
+ }
356
+
357
+ /** 含税 => 更新(不含税) */
358
+ export const updateUnitPriceExcludingTax = async (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
359
+ return new Promise((resolve) => {
360
+ form.validateFields(async (err, values) => {
361
+
362
+ err = err || {};
363
+
364
+ /** 税额 */
365
+ let taxAmount;
366
+
367
+ /** 金额(不含税) */
368
+ let lineAmountExcludeTax;
369
+
370
+ /** 不含税单价 */
371
+ let priceExcludeTax;
372
+
373
+ /** 扣除额 */
374
+ const deduction = controller.state.goodsListState.deduction;
375
+
376
+ // 计算税额
377
+ if (!promptErr(err.lineAmountIncludeTax) && !promptErr(err.taxRate)) {
378
+ taxAmount = countTaxAmount(values.lineAmountIncludeTax, deduction, values.taxRate);
379
+ }
380
+ form.setFieldsValue({ taxAmount });
381
+ await controller.setEditGood({ taxAmount });
382
+
383
+ // 计算 金额(不含税)
384
+ if ((taxAmount || taxAmount === 0) && !promptErr(err.lineAmountIncludeTax)) {
385
+ lineAmountExcludeTax = countAmountExcludeTax(values.lineAmountIncludeTax, taxAmount);
386
+ }
387
+ form.setFieldsValue({ lineAmountExcludeTax });
388
+ await controller.setEditGood({ lineAmountExcludeTax });
389
+
390
+ // 单价(不含税)
391
+ if (lineAmountExcludeTax && !promptErr(err.quantity)) {
392
+ priceExcludeTax = countPrice(lineAmountExcludeTax, values.quantity, controller.state.calculatingDigits);
393
+ }
394
+ form.setFieldsValue({ priceExcludeTax });
395
+ await controller.setEditGood({ priceExcludeTax });
396
+ });
397
+
398
+ resolve(undefined)
399
+ })
400
+ };
401
+
402
+ /** 不含税 => 更新(含税) */
403
+ export const updateUnitPriceTax = async (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
404
+ return new Promise((resolve) => {
405
+ form.validateFields(async (err, values) => {
406
+ err = err || {};
407
+
408
+ if (
409
+ !err.taxRat &&
410
+ (values.taxRate || values.taxRate === 0) &&
411
+ !promptErr(err.lineAmountExcludeTax) &&
412
+ (values.lineAmountExcludeTax || values.lineAmountExcludeTax === 0)
413
+ ) {
414
+
415
+ const calculatingDigits = controller.state.calculatingDigits;
416
+ // 金额(含税)= 金额(不含税)* (1+ 税率)
417
+ const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
418
+ const lineAmountIncludeTax = format2(evaluate(`${lineAmountExcludeTax} * (1+(${values.taxRate}/100))`));
419
+ await controller.setEditGood({ lineAmountIncludeTax });
420
+
421
+ // 单价(含税) = 金额(含税) / (數量)
422
+ // 是否有数量
423
+ if (!err.quantity && values.quantity) {
424
+ const priceIncludeTax = format15(evaluate(`${lineAmountIncludeTax} / ${values.quantity}`), calculatingDigits);
425
+ await controller.setEditGood({ priceIncludeTax });
426
+ }
427
+
428
+ // 税额 = 金额(含税)-金额(不含税)
429
+ const taxAmount = evaluate(`${lineAmountIncludeTax} - ${lineAmountExcludeTax}`);
430
+ form.setFieldsValue({ taxAmount });
431
+ await controller.setEditGood({ taxAmount });
432
+ } else {
433
+ form.setFieldsValue({ taxAmount: undefined });
434
+ await controller.setEditGood({ taxAmount: undefined });
435
+ }
436
+ // 单价(含税) = 单价(不含税) * (1+税率)
437
+ // if (
438
+ // !err.taxRat &&
439
+ // (values.taxRate || values.taxRate === 0) &&
440
+ // !promptErr(err.priceExcludeTax) &&
441
+ // (values.priceExcludeTax || values.priceExcludeTax === 0)
442
+ // ) {
443
+ // const priceExcludeTax = format15(values.priceExcludeTax);
444
+ // const priceIncludeTax = format15(evaluate(`${priceExcludeTax} * (1+(${values.taxRate}/100))`));
445
+ // await controller.setEditGood({ priceIncludeTax });
446
+ // }
447
+
448
+ resolve(undefined)
449
+ });
450
+ })
451
+ };
452
+
453
+ /** 保存到编辑货物 */
454
+ export const onSaveEditGood = lazyFn(
455
+ (
456
+ controller: InvoiceController,
457
+ form: WrappedFormUtils,
458
+ record: IGood,
459
+ id: string,
460
+ ) => {
461
+ form.validateFields(async (err, values) => {
462
+ err = err || {};
463
+ if (err[id]) return;
464
+
465
+ const v = {} as any;
466
+ v[id] = values[id];
467
+ await controller.setEditGood({ ...v });
468
+ });
469
+ },
470
+ 1000,
471
+ );
472
+
473
+ /** 单调赋码 */
474
+ export const endowCode = async (controller: InvoiceController, goods: IGood) => {
475
+ await controller.wait();
476
+ await controller.saveEditGood();
477
+ await controller.pipeline(async (s) => {
478
+ if (s.goodsListState.form && s.goodsListState.editGood?.$index === goods?.$index) {
479
+ const err: any = s.goodsListState.form.getFieldsError();
480
+ for (let key in err) {
481
+ if (!err[key]) continue;
482
+ message.error(err[key][0]);
483
+ return;
484
+ }
485
+ }
486
+
487
+ let g = s.goodsListState.goodsMap.get(goods.$index) as any;
488
+ let i = s.goodsListState.goodsList.indexOf(g);
489
+
490
+ switch (goods.lineAttribute) {
491
+ case LineAttributeType.正常:
492
+ s.goodsListState.endowCode.endowcodeGoodIndex = [goods.$index];
493
+ break;
494
+
495
+ case LineAttributeType.折扣行:
496
+
497
+ s.goodsListState.endowCode.endowcodeGoodIndex = [goods.$index, s.goodsListState.goodsList[i - 1].$index];
498
+ break;
499
+
500
+ case LineAttributeType.被折扣行:
501
+ s.goodsListState.endowCode.endowcodeGoodIndex = [goods.$index, s.goodsListState.goodsList[i + 1].$index];
502
+ break;
503
+ }
504
+ })();
505
+ }
506
+
507
+ /** 修改了 项目名称 */
508
+ export const onChangeItemName = async (controller: InvoiceController, form: WrappedFormUtils<any>, record: IGood) => {
509
+ controller.run(async s => {
510
+ const value = form.getFieldsValue().itemName;
511
+
512
+ if (s.goodsListState.isMyShow) {
513
+ await controller.setEditGood({ itemNameSelf: value });
514
+ record.itemName && await controller.setEditGood({ itemName: record.itemName });
515
+ } else {
516
+ await controller.setEditGood({ itemName: value });
517
+ record.itemNameSelf && await controller.setEditGood({ itemNameSelf: record.itemNameSelf });
518
+ }
519
+ })
520
+ }