kts-component-invoice-operate 3.2.244 → 3.2.246

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 (278) 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/BRANCH.md +5 -0
  8. package/README.md +12 -12
  9. package/branch/3.2.x +1 -0
  10. package/dist/Invoice/ui/default/GoodsList/hook/useColumns/autoFillFn/index.d.ts +2 -0
  11. package/dist/Invoice/ui/digtal/StakeFarmerholder/index.d.ts +2 -0
  12. package/dist/index.esm.js +126 -7
  13. package/dist/index.js +126 -7
  14. package/docs/index.md +5 -5
  15. package/docs-dist/404.html +33 -33
  16. package/docs-dist/index.html +33 -33
  17. package/docs-dist/static/arrowDown.a1cbf0d8.svg +2 -2
  18. package/docs-dist/static/arrowUp.4c482054.svg +2 -2
  19. package/docs-dist/static/fork.5431267d.svg +11 -11
  20. package/docs-dist/static/plus.44013ce3.svg +11 -11
  21. package/docs-dist/static/plus.4fd1af30.svg +11 -11
  22. package/docs-dist/umi.css +18 -18
  23. package/index.html +12 -12
  24. package/package.json +62 -62
  25. package/src/Invoice/Invoice-digtal/_test/architecture/index.tsx +21 -21
  26. package/src/Invoice/Invoice-digtal/_test/disabled/index.tsx +40 -40
  27. package/src/Invoice/Invoice-digtal/_test/easiest/index.tsx +214 -214
  28. package/src/Invoice/Invoice-digtal/_test/freight/index.tsx +14580 -14580
  29. package/src/Invoice/Invoice-digtal/_test/header/index.tsx +84 -84
  30. package/src/Invoice/Invoice-digtal/_test/importGoods/index.tsx +868 -868
  31. package/src/Invoice/Invoice-digtal/_test/importStakeholder/index.tsx +18 -18
  32. package/src/Invoice/Invoice-digtal/_test/lineCredit/index.tsx +19 -19
  33. package/src/Invoice/Invoice-digtal/_test/pay/index.tsx +14636 -14636
  34. package/src/Invoice/Invoice-digtal/_test/prefab/index.tsx +150 -150
  35. package/src/Invoice/Invoice-digtal/_test/readOnly/index.tsx +55 -55
  36. package/src/Invoice/Invoice-digtal/_test/realEstateInfo/index.tsx +83 -83
  37. package/src/Invoice/Invoice-digtal/_test/stakeholder/index.tsx +12 -12
  38. package/src/Invoice/Invoice-digtal/_test/typeSelection/index.tsx +29 -29
  39. package/src/Invoice/Invoice-digtal/index.md +44 -44
  40. package/src/Invoice/InvoiceController/InvoiceControllerForm/index.ts +116 -116
  41. package/src/Invoice/InvoiceController/InvoiceControllerState/AutoComplete/index.ts +26 -26
  42. package/src/Invoice/InvoiceController/InvoiceControllerState/BuyerState/index.tsx +88 -88
  43. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/IColumnsReplenish/index.ts +10 -10
  44. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/IGood/index.ts +33 -33
  45. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/ImportGoods/index.ts +81 -81
  46. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/index.ts +39 -39
  47. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/Drag/index.ts +15 -15
  48. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/EndowCode/index.tsx +104 -104
  49. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IColumnsReplenish/index.ts +10 -10
  50. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IGood/index.ts +91 -90
  51. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ImportGoods/index.ts +84 -84
  52. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/LineAttributeType/index.ts +7 -7
  53. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ProductComparison/index.ts +9 -9
  54. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/index.ts +134 -134
  55. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/IColumnsReplenish/index.ts +10 -10
  56. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/IGood/index.ts +35 -35
  57. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/ImportGoods/index.ts +81 -81
  58. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/index.ts +39 -39
  59. package/src/Invoice/InvoiceController/InvoiceControllerState/Stakeholder/index.ts +13 -13
  60. package/src/Invoice/InvoiceController/InvoiceControllerState/index.ts +76 -76
  61. package/src/Invoice/InvoiceController/fns/addFreight.ts +11 -11
  62. package/src/Invoice/InvoiceController/fns/addGood.ts +11 -11
  63. package/src/Invoice/InvoiceController/fns/addGoodDiscount.ts +126 -126
  64. package/src/Invoice/InvoiceController/fns/addGoodDiscountV2.ts +86 -86
  65. package/src/Invoice/InvoiceController/fns/addPay.ts +11 -11
  66. package/src/Invoice/InvoiceController/fns/delFreight.ts +38 -38
  67. package/src/Invoice/InvoiceController/fns/delGood.ts +41 -41
  68. package/src/Invoice/InvoiceController/fns/delPay.ts +38 -38
  69. package/src/Invoice/InvoiceController/fns/getGoodsSearch.ts +26 -26
  70. package/src/Invoice/InvoiceController/fns/importGoodsDrawer.ts +79 -79
  71. package/src/Invoice/InvoiceController/fns/itemBlur.ts +40 -40
  72. package/src/Invoice/InvoiceController/fns/mergeDetails.ts +201 -201
  73. package/src/Invoice/InvoiceController/fns/mergeDiscount.ts +35 -35
  74. package/src/Invoice/InvoiceController/fns/saveEditFreight.ts +24 -24
  75. package/src/Invoice/InvoiceController/fns/saveEditGood.ts +24 -24
  76. package/src/Invoice/InvoiceController/fns/saveEditPay.ts +23 -23
  77. package/src/Invoice/InvoiceController/fns/setEditFreight.ts +16 -16
  78. package/src/Invoice/InvoiceController/fns/setEditGood.ts +16 -16
  79. package/src/Invoice/InvoiceController/fns/setEditPay.ts +16 -16
  80. package/src/Invoice/InvoiceController/fns/setFreight.ts +10 -10
  81. package/src/Invoice/InvoiceController/fns/setGoods.ts +10 -10
  82. package/src/Invoice/InvoiceController/fns/setPay.ts +10 -10
  83. package/src/Invoice/InvoiceController/fns/updateInvoiceNo.ts +8 -8
  84. package/src/Invoice/InvoiceController/index.ts +127 -127
  85. package/src/Invoice/_test/buyerNameSearch/index.tsx +42 -42
  86. package/src/Invoice/_test/children/index.tsx +214 -214
  87. package/src/Invoice/_test/deduction/index.tsx +956 -957
  88. package/src/Invoice/_test/draft/index.tsx +40 -40
  89. package/src/Invoice/_test/easiest/index.tsx +5 -5
  90. package/src/Invoice/_test/endowCode/index.tsx +1158 -1158
  91. package/src/Invoice/_test/goodsMenuExpand/index.tsx +32 -32
  92. package/src/Invoice/_test/importBuyer/index.tsx +74 -74
  93. package/src/Invoice/_test/importGoods/index.tsx +1197 -1197
  94. package/src/Invoice/_test/invoiceType/index.tsx +59 -59
  95. package/src/Invoice/_test/isInvoiceNo/index.tsx +12 -12
  96. package/src/Invoice/_test/replaceHead/index.tsx +22 -22
  97. package/src/Invoice/_test/retrieveData/index.tsx +22 -22
  98. package/src/Invoice/_test/seller/index.tsx +28 -28
  99. package/src/Invoice/_test/setDataSource/index.tsx +73 -73
  100. package/src/Invoice/_test/unit/index.tsx +19 -19
  101. package/src/Invoice/index.less +31 -31
  102. package/src/Invoice/index.md +56 -56
  103. package/src/Invoice/index.tsx +200 -200
  104. package/src/Invoice/tools/calculate/index.ts +144 -144
  105. package/src/Invoice/tools/coolingFn/index.ts +17 -17
  106. package/src/Invoice/tools/evaluate/index.ts +7 -7
  107. package/src/Invoice/tools/idGenerator/index.ts +2 -2
  108. package/src/Invoice/tools/itemName/index.ts +55 -55
  109. package/src/Invoice/tools/lazyFn/index.ts +19 -19
  110. package/src/Invoice/tools/mounting/index.ts +13 -13
  111. package/src/Invoice/tools/strringFn/index.ts +40 -40
  112. package/src/Invoice/tools/useToGenerateId/index.ts +12 -12
  113. package/src/Invoice/tools/utils/index.ts +1 -1
  114. package/src/Invoice/tools/utils/money/index.ts +20 -20
  115. package/src/Invoice/ui/default/AddComparisonDrawer/index.tsx +149 -149
  116. package/src/Invoice/ui/default/Buyer/index.less +219 -219
  117. package/src/Invoice/ui/default/Buyer/index.tsx +114 -114
  118. package/src/Invoice/ui/default/Buyer/ui/BuyerNameInput/index.tsx +166 -166
  119. package/src/Invoice/ui/default/Buyer/ui/ImportBuyerButton/index.tsx +21 -21
  120. package/src/Invoice/ui/default/EndowCodeDrawer/index.less +8 -8
  121. package/src/Invoice/ui/default/EndowCodeDrawer/index.tsx +612 -612
  122. package/src/Invoice/ui/default/GoodsList/hook/useColumns/autoFillFn/index.ts +681 -647
  123. package/src/Invoice/ui/default/GoodsList/hook/useColumns/index.tsx +769 -719
  124. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
  125. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
  126. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Expand/index.tsx +57 -57
  127. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.less +18 -18
  128. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.tsx +49 -49
  129. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +17 -17
  130. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +91 -91
  131. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  132. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  133. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +118 -118
  134. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/dist/index.js +32 -32
  135. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
  136. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +25 -25
  137. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
  138. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +99 -99
  139. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  140. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  141. package/src/Invoice/ui/default/GoodsList/hook/useDeduction/index.tsx +24 -24
  142. package/src/Invoice/ui/default/GoodsList/hook/useOnRow/index.tsx +52 -52
  143. package/src/Invoice/ui/default/GoodsList/hook/useRowSelection/index.tsx +120 -120
  144. package/src/Invoice/ui/default/GoodsList/hook/useWindowClick/index.tsx +23 -23
  145. package/src/Invoice/ui/default/GoodsList/index.less +185 -185
  146. package/src/Invoice/ui/default/GoodsList/index.tsx +207 -207
  147. package/src/Invoice/ui/default/GoodsList/ui/AddRowButton/index.tsx +72 -72
  148. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.less +21 -21
  149. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +244 -244
  150. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  151. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +69 -69
  152. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +65 -65
  153. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDetails/index.tsx +91 -91
  154. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDiscount/index.tsx +36 -36
  155. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesDiscount/index.tsx +109 -109
  156. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesGifts/index.tsx +94 -94
  157. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/index.tsx +37 -37
  158. package/src/Invoice/ui/default/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
  159. package/src/Invoice/ui/default/GoodsList/ui/Search/index.less +10 -10
  160. package/src/Invoice/ui/default/GoodsList/ui/Search/index.tsx +52 -52
  161. package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.less +18 -18
  162. package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.tsx +114 -114
  163. package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.less +40 -40
  164. package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.tsx +71 -71
  165. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.less +38 -38
  166. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.tsx +130 -130
  167. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.less +44 -44
  168. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.tsx +96 -96
  169. package/src/Invoice/ui/default/GoodsList/ui/TaxIncludedSwitch/index.tsx +31 -31
  170. package/src/Invoice/ui/default/ImportBuyerDrawer/index.tsx +75 -75
  171. package/src/Invoice/ui/default/ImportGoodsDrawer/index.tsx +201 -201
  172. package/src/Invoice/ui/default/InvoiceHeader/index.less +68 -68
  173. package/src/Invoice/ui/default/InvoiceHeader/index.tsx +246 -246
  174. package/src/Invoice/ui/default/Seller/index.less +113 -113
  175. package/src/Invoice/ui/default/Seller/index.tsx +98 -98
  176. package/src/Invoice/ui/default/Sign/index.less +14 -14
  177. package/src/Invoice/ui/default/Sign/index.tsx +71 -71
  178. package/src/Invoice/ui/digtal/Architecture/index.less +18 -18
  179. package/src/Invoice/ui/digtal/Architecture/index.tsx +177 -177
  180. package/src/Invoice/ui/digtal/FreightList/hook/useColumns/dist/index.js +616 -616
  181. package/src/Invoice/ui/digtal/FreightList/hook/useColumns/index.tsx +246 -246
  182. package/src/Invoice/ui/digtal/FreightList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  183. package/src/Invoice/ui/digtal/FreightList/hook/useOnRow/index.tsx +37 -37
  184. package/src/Invoice/ui/digtal/FreightList/hook/useRowSelection/index.tsx +119 -119
  185. package/src/Invoice/ui/digtal/FreightList/hook/useWindowClick/index.tsx +23 -23
  186. package/src/Invoice/ui/digtal/FreightList/index.less +72 -72
  187. package/src/Invoice/ui/digtal/FreightList/index.tsx +129 -129
  188. package/src/Invoice/ui/digtal/FreightList/ui/AddRowButton/index.tsx +74 -74
  189. package/src/Invoice/ui/digtal/FreightList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
  190. package/src/Invoice/ui/digtal/FreightList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +36 -36
  191. package/src/Invoice/ui/digtal/FreightList/ui/TableRow/index.less +28 -28
  192. package/src/Invoice/ui/digtal/FreightList/ui/TableRow/index.tsx +20 -20
  193. package/src/Invoice/ui/digtal/FreightList/ui/TableVirtual/index.less +38 -38
  194. package/src/Invoice/ui/digtal/FreightList/ui/TableVirtual/index.tsx +108 -108
  195. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/autoFillFn/index.ts +683 -683
  196. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/dist/index.js +616 -616
  197. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/index.tsx +723 -724
  198. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/svg/plus.svg +11 -11
  199. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
  200. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
  201. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +9 -9
  202. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +87 -87
  203. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  204. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  205. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +76 -76
  206. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
  207. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +34 -34
  208. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
  209. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +98 -98
  210. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  211. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  212. package/src/Invoice/ui/digtal/GoodsList/hook/useOnRow/index.tsx +51 -51
  213. package/src/Invoice/ui/digtal/GoodsList/hook/useRowSelection/index.tsx +121 -121
  214. package/src/Invoice/ui/digtal/GoodsList/hook/useWindowClick/index.tsx +23 -23
  215. package/src/Invoice/ui/digtal/GoodsList/index.less +56 -56
  216. package/src/Invoice/ui/digtal/GoodsList/index.tsx +181 -181
  217. package/src/Invoice/ui/digtal/GoodsList/ui/AddRowButton/index.tsx +87 -87
  218. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +340 -340
  219. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/svg/add.svg +11 -11
  220. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  221. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
  222. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +37 -37
  223. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +82 -82
  224. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useReselectInvoiceType/index.tsx +57 -57
  225. package/src/Invoice/ui/digtal/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
  226. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.less +11 -11
  227. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.tsx +60 -60
  228. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.less +53 -53
  229. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.tsx +98 -98
  230. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/svg/fork.svg +11 -11
  231. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.less +28 -28
  232. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.tsx +52 -52
  233. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.less +38 -38
  234. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.tsx +113 -113
  235. package/src/Invoice/ui/digtal/GoodsList/ui/TaxIncludedSwitch/index.tsx +34 -34
  236. package/src/Invoice/ui/digtal/InvoiceHeader/index.less +57 -57
  237. package/src/Invoice/ui/digtal/InvoiceHeader/index.tsx +77 -77
  238. package/src/Invoice/ui/digtal/PayList/hook/useColumns/dist/index.js +616 -616
  239. package/src/Invoice/ui/digtal/PayList/hook/useColumns/index.tsx +168 -168
  240. package/src/Invoice/ui/digtal/PayList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  241. package/src/Invoice/ui/digtal/PayList/hook/useOnRow/index.tsx +37 -37
  242. package/src/Invoice/ui/digtal/PayList/hook/useRowSelection/index.tsx +119 -119
  243. package/src/Invoice/ui/digtal/PayList/hook/useWindowClick/index.tsx +19 -19
  244. package/src/Invoice/ui/digtal/PayList/index.less +72 -72
  245. package/src/Invoice/ui/digtal/PayList/index.tsx +132 -132
  246. package/src/Invoice/ui/digtal/PayList/ui/AddRowButton/index.tsx +74 -74
  247. package/src/Invoice/ui/digtal/PayList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
  248. package/src/Invoice/ui/digtal/PayList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +36 -36
  249. package/src/Invoice/ui/digtal/PayList/ui/TableRow/index.less +28 -28
  250. package/src/Invoice/ui/digtal/PayList/ui/TableRow/index.tsx +20 -20
  251. package/src/Invoice/ui/digtal/PayList/ui/TableVirtual/index.less +38 -38
  252. package/src/Invoice/ui/digtal/PayList/ui/TableVirtual/index.tsx +108 -108
  253. package/src/Invoice/ui/digtal/RealEstateInfo/index.less +21 -21
  254. package/src/Invoice/ui/digtal/RealEstateInfo/index.tsx +451 -451
  255. package/src/Invoice/ui/digtal/Sign/index.less +48 -48
  256. package/src/Invoice/ui/digtal/Sign/index.tsx +99 -99
  257. package/src/Invoice/ui/digtal/StakeFarmerholder/index.less +99 -99
  258. package/src/Invoice/ui/digtal/StakeFarmerholder/index.tsx +1102 -1096
  259. package/src/Invoice/ui/digtal/StakeFarmerholder/svg/arrowDown.svg +2 -2
  260. package/src/Invoice/ui/digtal/StakeFarmerholder/svg/arrowUp.svg +2 -2
  261. package/src/Invoice/ui/digtal/StakeFarmerholder/svg/plus.svg +11 -11
  262. package/src/Invoice/ui/digtal/Stakeholder/index.less +99 -99
  263. package/src/Invoice/ui/digtal/Stakeholder/index.tsx +453 -453
  264. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowDown.svg +2 -2
  265. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowUp.svg +2 -2
  266. package/src/Invoice/ui/digtal/Stakeholder/svg/plus.svg +11 -11
  267. package/src/InvoiceTypeModal/_test/easiest/index.tsx +31 -31
  268. package/src/InvoiceTypeModal/dist/index.js +92 -92
  269. package/src/InvoiceTypeModal/index.less +7 -7
  270. package/src/InvoiceTypeModal/index.md +5 -5
  271. package/src/InvoiceTypeModal/index.tsx +161 -161
  272. package/src/TaxClassificationCodeModal/_test/easiest/index.tsx +184 -184
  273. package/src/TaxClassificationCodeModal/index.less +17 -17
  274. package/src/TaxClassificationCodeModal/index.md +6 -6
  275. package/src/TaxClassificationCodeModal/index.tsx +152 -152
  276. package/src/index.ts +13 -13
  277. package/tsconfig.json +31 -31
  278. package/typings.d.ts +3 -3
@@ -1,612 +1,612 @@
1
- import React from 'react';
2
- import Invoice from '../../..';
3
- import { Button, Drawer, Select, Modal, Input as InputAntd, Form, Tree, message } from 'kts-components-antd-x3';
4
- import { chain, bignumber } from 'mathjs';
5
- import { Input, NumberPicker } from '@formily/antd-components';
6
- import { format15 } from '../GoodsList/hook/useColumns/autoFillFn';
7
- import { LineAttributeType } from '../../../InvoiceController';
8
- import IGood from '../../../InvoiceController/InvoiceControllerState/GoodsListState/IGood';
9
- import { countTaxAmount, countAmountExcludeTax, countPrice } from '../../../tools/calculate';
10
- import { bytesLnegth, cutStr } from '../../../tools/strringFn';
11
- import {
12
- SchemaForm,
13
- FormButtonGroup,
14
- createAsyncFormActions,
15
- SchemaMarkupField as Field,
16
- FormEffectHooks,
17
- } from '@formily/antd';
18
- import './index.less';
19
- import { TaxClassificationModal } from "../../../..";
20
-
21
- const { TreeNode } = Tree;
22
- const { confirm } = Modal;
23
-
24
- export default () => {
25
- const controller = Invoice.useInvoiceController();
26
-
27
- const visible = controller.useMemo(s => s.goodsListState.endowCode.endowcodeGoodIndex.length > 0, []);
28
-
29
- const [defaultValue, setDefaultValue] = React.useState<IGood>();
30
-
31
- const onClose = React.useCallback(() => {
32
- controller.pipeline(async (s) => {
33
- s.goodsListState.endowCode.endowcodeGoodIndex = [];
34
- })();
35
- }, [controller]);
36
- // React.useEffect(()=>{
37
- // const a=chain(bignumber('21.00')).divide(bignumber('10.4999999999999123341231'))
38
- // .done()
39
- // .toString()
40
- // console.log(a)
41
- // },[])
42
- // 计算赋码默认值
43
- React.useEffect(() => {
44
- if (visible) {
45
- controller.pipeline(async s => {
46
- const endowcodeGoodIndex = s.goodsListState.endowCode.endowcodeGoodIndex.filter(i => {
47
- const good = s.goodsListState.goodsMap.get(i);
48
- if (!good) return false;
49
-
50
- return good.lineAttribute !== LineAttributeType.折扣行;
51
- })
52
-
53
- const good = s.goodsListState.goodsMap.get(s.goodsListState.endowCode.endowcodeGoodIndex[0]);
54
- if (!good) return;
55
-
56
- const getDefaultValue = s.goodsListState.endowCode.getDefaultValue;
57
- if (getDefaultValue) {
58
- setDefaultValue(await getDefaultValue({ ...good }, endowcodeGoodIndex.length));
59
- } else {
60
- if (endowcodeGoodIndex.length === 1) {
61
- if (controller.state.goodsListState.isUpdateGoodsTaxRateList && controller.getGoodsTaxRateList && good.taxClassificationCode) {
62
- const goodsTaxRateList = await controller.getGoodsTaxRateList(good.taxClassificationCode);
63
- good.goodsTaxRateList = goodsTaxRateList;
64
- // if (good.taxRate !== undefined && good.taxRate !== null && !goodsTaxRateList.includes(good.taxRate)) {
65
- // good.taxRate = undefined;
66
- // }
67
- }
68
- setDefaultValue(good);
69
- } else {
70
- setDefaultValue({ taxRate: good.taxRate } as any);
71
- }
72
- }
73
- })()
74
- } else {
75
- setDefaultValue(undefined);
76
- }
77
- }, [visible])
78
-
79
- return (
80
- <Drawer
81
- title="赋码"
82
- placement="right"
83
- destroyOnClose={true}
84
- closable={false}
85
- width={383}
86
- onClose={onClose}
87
- visible={visible}
88
- >
89
- {defaultValue && <DrawerBody defaultValue={defaultValue} />}
90
- </Drawer>
91
- );
92
- };
93
-
94
- const DrawerBody = (props: { defaultValue: IGood }) => {
95
-
96
- const controller = Invoice.useInvoiceController();
97
-
98
- const { defaultValue } = props;
99
-
100
- const actions = React.useMemo(() => createAsyncFormActions(), []);
101
-
102
- const taxClassificationProps = controller.useMemo(s => s.taxClassificationProps, []);
103
-
104
- /** 免税类型 是否需要 */
105
- const isTaxFreeTypeNeeded = controller.useMemo(s => s.goodsListState.endowCode.isTaxFreeTypeNeeded, []);
106
-
107
- /** 税率 是否禁用 */
108
- const readOnlyTaxRate = controller.useMemo(s => {
109
- if (s.goodsListState.endowCode.getReadOnlyTaxRate) {
110
- return s.goodsListState.endowCode.getReadOnlyTaxRate(s.goodsListState);
111
- } else {
112
- return false;
113
- }
114
- }, [])
115
-
116
- /** 优惠政策 是否禁用 */
117
- const readOnlyFavouredPolicy = controller.useMemo(s => {
118
- if (s.goodsListState.endowCode.getReadOnlyFavouredPolicy) {
119
- return s.goodsListState.endowCode.getReadOnlyFavouredPolicy(s.goodsListState);
120
- } else {
121
- return false;
122
- }
123
- }, [])
124
-
125
- /** 税率列表 */
126
- const taxRateList = controller.useMemo(s => s.goodsListState.taxRateList, []);
127
-
128
- /** 免税类型 列表 */
129
- const taxFreeTypeList = controller.useMemo(s => s.goodsListState.endowCode.taxFreeTypeList, []);
130
-
131
- /** 优惠政策类型列表 */
132
- const favouredPolicyNameList = controller.useMemo(s => s.goodsListState.endowCode.favouredPolicyNameList, []);
133
-
134
- /** 优惠政策类型列表 */
135
- // const getTaxCategoryCodeTree = controller.useMemo(s => s.goodsListState.endowCode.getTaxCategoryCodeTree, []);
136
-
137
- /** 税率 */
138
- const [taxRate, setTaxRate] = React.useState<number>(0);
139
-
140
- /** 商品可用税率 */
141
- const [goodsTaxRateList, setGoodsTaxRateList] = React.useState<number[] | null | undefined>(defaultValue.goodsTaxRateList);
142
-
143
- const formattedTaxRateList = React.useMemo(() => {
144
- return (goodsTaxRateList || taxRateList).map((e) => ({ label: `${e}%`, value: e }))
145
- }, [goodsTaxRateList, taxRateList])
146
-
147
- /** 税收分类编码 选择组件 */
148
- const ShowSearch = React.useCallback(props => {
149
-
150
- const [dataSource, setDataSource] = React.useState<any[]>([]);
151
-
152
- const onSearch = React.useCallback(async e => {
153
- const arr = await controller.state.goodsListState.endowCode.getTaxCategoryCodeList(e);
154
- setDataSource(arr);
155
- }, [])
156
-
157
- const onChange = React.useCallback((value: string) => {
158
- if (props.onChange) {
159
- props.onChange(value);
160
- }
161
-
162
- const info = dataSource.filter(i => i.value === value)[0];
163
- if (!info) return;
164
-
165
- // !readOnlyTaxRate && actions.setFieldState('taxRate', async s => {
166
- // if (info.taxRate || info.taxRate === 0) {
167
- // s.value = info.taxRate
168
- // }
169
- // });
170
-
171
- actions.setFieldState('shorthand', async (s) => {
172
- if (info.shorthand) {
173
- s.value = info.shorthand
174
- }
175
- });
176
- }, [actions, dataSource, readOnlyTaxRate])
177
-
178
- return (
179
- <Select
180
- {...props}
181
- showSearch
182
- showArrow={false}
183
- notFoundContent={null}
184
- filterOption={false}
185
- onSearch={onSearch}
186
- onChange={onChange}
187
- >
188
- {dataSource.map(e => <Select.Option key={e.value} value={e.value}>{e.label}</Select.Option>)}
189
- </Select>
190
- )
191
- }, [controller, actions])
192
-
193
- /** 税收分类编码 选择组件2 */
194
- const ShowSearch2 = React.useCallback(props => {
195
-
196
- // 是否显示
197
- const [visible, setVisible] = React.useState(false);
198
-
199
- // 税收分类编码树
200
- const [list, setList] = React.useState<any[]>();
201
-
202
- // 搜索条件
203
- const [filter, setFilter] = React.useState<{
204
- /** 税收分类编码 */
205
- taxCategoryCode?: string,
206
-
207
- /** 货物和劳务名称/简称 */
208
- val?: string
209
- }>();
210
-
211
- /** 创建 树节点 */
212
- const createTreeNode = React.useCallback(() => {
213
- if (!list) return <></>;
214
-
215
- return ctn(list);
216
-
217
- function title(label: string) {
218
- if (!filter) return label;
219
- label = (filter.taxCategoryCode ? label.split(new RegExp(filter.taxCategoryCode, 'g')) : [label]).join(`<span style="color: #1890ff;">${filter.taxCategoryCode}</span>`);
220
- label = (filter.val ? label.split(new RegExp(filter.val, 'g')) : [label]).join(`<span style="color: #1890ff;">${filter.val}</span>`);
221
- return <span dangerouslySetInnerHTML={{ __html: label }} />
222
- }
223
-
224
- function ctn(l: any[], p = '0') {
225
- if (!l || !l.length) return [<></>];
226
- return l.filter(e => e.pid === p).map(e => {
227
- return (
228
- <TreeNode title={title(e.label)} key={e.id}>
229
- {ctn(l, e.id)}
230
- </TreeNode>
231
- )
232
- })
233
- }
234
- }, [list, filter])
235
-
236
- /** 点击了节点 */
237
- const onSelect = React.useCallback((e: string[]) => {
238
- const id = e[0];
239
-
240
- // 是否叶子节点
241
- if (list?.filter(e => e.pid === id).length !== 0) { return; }
242
-
243
- const info = list?.filter(e => e.id === id)[0];
244
-
245
- // !readOnlyTaxRate && actions.setFieldState('taxRate', async s => {
246
- // if (info.taxRate || info.taxRate === 0) {
247
- // s.value = info.taxRate
248
- // }
249
- // });
250
-
251
- actions.setFieldState('taxClassificationCode', async s => {
252
- if (info.id) {
253
- s.value = info.id
254
- }
255
- });
256
-
257
- actions.setFieldState('shorthand', async (s) => {
258
- if (info.shorthand) {
259
- s.value = info.shorthand
260
- }
261
- });
262
-
263
- setVisible(false);
264
- }, [list, actions, readOnlyTaxRate])
265
-
266
- React.useEffect(() => {
267
- (async () => {
268
- const fn = controller.state.goodsListState.endowCode.getTaxCategoryCodeTree || (async () => []);
269
- const list = await fn(filter?.taxCategoryCode, filter?.val);
270
- setList(list || []);
271
- })()
272
- }, [filter])
273
-
274
- React.useEffect(() => {
275
- if (visible) {
276
- setList([])
277
- }
278
- }, [visible])
279
-
280
- return (
281
- <>
282
- <InputAntd readOnly value={props.value} addonAfter={<Button size="small" type="link" onClick={() => { setVisible(true) }} >点击选择</Button>} />
283
- <Drawer
284
- title="税收分类编码"
285
- visible={visible}
286
- width={500}
287
- onClose={() => { setVisible(false) }}
288
- >
289
- <Form key={`${visible}`} >
290
- <Form.Item label="产品或服务简称" >
291
- <InputAntd onChange={e => { setFilter({ ...filter, val: e.target.value }) }} />
292
- </Form.Item>
293
- <Form.Item label="税收分类编码">
294
- <InputAntd onChange={e => { setFilter({ ...filter, taxCategoryCode: e.target.value }) }} />
295
- </Form.Item>
296
- </Form>
297
- {
298
- (list && list.length > 0)
299
- ? <Tree
300
- defaultExpandAll
301
- selectedKeys={[]}
302
- onSelect={onSelect}
303
- >
304
- {createTreeNode()}
305
- </Tree>
306
- : <span style={{ color: '#00000073' }} >请输入“产品或服务简称”或“税收分类编码”查找数据。</span>
307
- }
308
- </Drawer>
309
- </>
310
- )
311
- }, [controller, actions])
312
-
313
- /** 税收分类编码 选择组件3 */
314
- const ShowSearch3 = React.useCallback(props => {
315
- const [open, setOpen] = React.useState(false);
316
-
317
- const [list, setList] = React.useState<any>([]);
318
-
319
- const onSearch = React.useCallback(async (value: any = null) => {
320
- if(value?.target?.value){
321
- const arr = await controller.state.goodsListState.endowCode.onSearchTaxClassificationCode(value?.target?.value);
322
- const list: any[] = arr.map((item: any)=> {
323
- return {
324
- ...item,
325
- title: `${item.productName} ${item.taxCategoryCode}`,
326
- key: item.taxCategoryCode,
327
- isLeaf: true
328
- }
329
- });
330
- setList(list);
331
- } else {
332
- await onLoad();
333
- }
334
- }, []);
335
-
336
- const onLoad = React.useCallback(async (value?: any) => {
337
- const arr = await controller.state.goodsListState.endowCode.onLoadTaxClassificationCode(value?.taxCategoryCode);
338
- const data: any[] = arr.map((item: any)=> {
339
- return {
340
- ...item,
341
- title: `${item.productName} ${item.taxCategoryCode}`,
342
- key: item.taxCategoryCode
343
- }
344
- });
345
-
346
- const treeData = optimizeTreeData(data);
347
-
348
- if(value?.key) {
349
- setList((origin: any)=> {
350
- updateTreeData(origin, value.key, treeData)
351
- });
352
- } else {
353
- setList(treeData);
354
- }
355
- return [];
356
- }, []);
357
-
358
- const onClick = React.useCallback(async () => {
359
- setOpen(true);
360
- await onLoad();
361
- }, []);
362
- const onSubmit1 = React.useCallback((key: any, info: any) => {
363
- // console.log('1231231231', key, info);
364
- // 根据税编改变税率列表
365
- // 如果只有一个,默认选中,有多个时,置空,用户手选
366
- // if (controller.state.goodsListState.isUpdateGoodsTaxRateList) {
367
- // if (info.node.taxRateList?.length) {
368
- // setGoodsTaxRateList(info.node.taxRateList);
369
- // }
370
- // if (!readOnlyTaxRate) {
371
- // actions.setFieldState('taxRate', async s => {
372
- // if (info.node.taxRateList && info.node.taxRateList?.length === 1) {
373
- // s.value = info.node.taxRateList[0]
374
- // } else {
375
- // s.value = undefined
376
- // }
377
- // });
378
-
379
- // }
380
- // }
381
-
382
- // !readOnlyTaxRate && actions.setFieldState('taxRate', async s => {
383
- // if (info.node.taxRate || info.taxRate === 0) {
384
- // s.value = info.node.taxRate
385
- // }
386
- // });
387
- let node = info.node || info;
388
- actions.setFieldState('taxClassificationCode', async s => {
389
- if(node.taxCategoryCode) {
390
- s.value = node.taxCategoryCode
391
- }
392
- });
393
-
394
- actions.setFieldState('shorthand', async (s) => {
395
- if (node.shorthand){
396
- s.value = node.shorthand
397
- }
398
- });
399
- setOpen(false);
400
- }, [controller, actions]);
401
-
402
- const onSelect = React.useCallback((key: any, info: any) => {
403
- let node = info.node || info;
404
- if (controller.state.goodsListState.isUpdateGoodsTaxRateList) {
405
- if (node.taxRateList?.length) {
406
- setGoodsTaxRateList(node.taxRateList);
407
- }
408
- if (!readOnlyTaxRate) {
409
- actions.setFieldState('taxRate', async s => {
410
- if (node.taxRateList && node.taxRateList?.length === 1) {
411
- s.value = node.taxRateList[0]
412
- } else {
413
- s.value = undefined
414
- }
415
- });
416
-
417
- }
418
- }
419
- setInfo(info.node);
420
- // setOpen(false);
421
- }, [controller, actions]);
422
-
423
- const optimizeTreeData = (data: any): any => {
424
- return data.map((item: any)=> {
425
- return {
426
- ...item,
427
- selectable: item?.hzx === 'N',
428
- isLeaf: item?.hzx === 'N'
429
- }
430
- });
431
- }
432
-
433
- const updateTreeData = (list: any, key: React.Key, children: any): any => {
434
- const data = list.map((node: any) => {
435
- if (node.key === key) {
436
- return {
437
- ...node,
438
- children
439
- };
440
- }
441
- if (node.children) {
442
- return {
443
- ...node,
444
- children: updateTreeData(node.children, key, children)
445
- };
446
- }
447
- return node;
448
- });
449
- setList(data);
450
- return data;
451
- }
452
- const [info, setInfo] = React.useState({});
453
- return (
454
- <>
455
- <InputAntd readOnly onClick={onClick} value={props.value} />
456
- <TaxClassificationModal
457
- list={list}
458
- open={open}
459
- info={info}
460
- onSelect={onSelect}
461
- onSubmit={onSubmit1}
462
- onCancel={()=> {setOpen(false); setInfo({})}}
463
- onSearch={onSearch}
464
- onLoad={onLoad}
465
- />
466
- </>
467
- )
468
- }, [controller, actions])
469
-
470
- // 是否享受优惠政策
471
- const [favouredPolicyMark, setFavouredPolicyMark] = React.useState<number>(0);
472
-
473
- // 确定
474
- const onSubmit = React.useCallback(values => {
475
- controller.pipeline(async s => {
476
-
477
- const endowCodeGood = s.goodsListState.endowCode.endowcodeGoodIndex.map(e => s.goodsListState.goodsMap.get(e));
478
-
479
- // 赋码
480
- endowCodeGood.forEach(good => {
481
- if (!good) return;
482
-
483
- good.shorthand = values.shorthand;
484
- good.taxClassificationCode = values.taxClassificationCode;
485
- good.taxRate = values.taxRate;
486
- good.taxFreeType = values.taxFreeType;
487
- good.favouredPolicyMark = values.favouredPolicyMark;
488
- good.favouredPolicyName = values.favouredPolicyName;
489
-
490
- // 无论是否含税,都保持价税合计不变
491
- good.taxAmount = countTaxAmount(good.lineAmountIncludeTax || 0, s.goodsListState.deduction, values.taxRate);
492
- if (good.taxAmount || good.taxAmount === 0 ) {
493
- good.lineAmountExcludeTax = countAmountExcludeTax(good.lineAmountIncludeTax || 0, good.taxAmount);
494
- }
495
- if (good.lineAmountExcludeTax && good.quantity) {
496
- good.priceExcludeTax = countPrice(good.lineAmountExcludeTax, good.quantity, controller.state.calculatingDigits) as any;
497
- }
498
-
499
- //赋值商品的可用税率
500
- good.goodsTaxRateList = goodsTaxRateList;
501
-
502
- });
503
-
504
- s.goodsListState.goodsList = s.goodsListState.goodsList.slice();
505
- s.goodsListState.endowCode.endowcodeGoodIndex = [];
506
- })();
507
- }, [controller, goodsTaxRateList]);
508
-
509
- const effects = React.useCallback(() => {
510
- // 税率变化
511
- FormEffectHooks.onFieldValueChange$('taxRate').subscribe((e) => {
512
- setTaxRate(e.value);
513
- actions.setFieldState('taxFreeType', async (s) => {
514
- if (e.value !== 0)
515
- s.value = undefined;
516
- });
517
- });
518
-
519
- // 是否享受优惠政策
520
- FormEffectHooks.onFieldValueChange$('favouredPolicyMark').subscribe((e) => {
521
- setFavouredPolicyMark(e.value);
522
- actions.setFieldState('favouredPolicyName', async (s) => {
523
- if (e.value === 0)
524
- s.value = undefined;
525
- });
526
- });
527
- }, [actions]);
528
-
529
- // 更新 税收分类编码列表
530
- React.useEffect(() => {
531
- if (controller.getTaxCategoryCodeList) controller.getTaxCategoryCodeList();
532
- }, [controller]);
533
-
534
- return (
535
- <SchemaForm actions={actions} previewPlaceholder=" " components={{ ...components, showSearch: !!controller.state.goodsListState.endowCode.onLoadTaxClassificationCode ? ShowSearch3 : ShowSearch }} effects={effects}>
536
- <FormButtonGroup>
537
- <Field
538
- name="taxClassificationCode"
539
- type="showSearch"
540
- title="税收分类编码"
541
- // enum={taxCategoryCodeList}
542
- default={defaultValue?.taxClassificationCode}
543
- x-rules={[{ message: '请选择税收分类编码', required: true }]}
544
- />
545
- <Field
546
- name="shorthand"
547
- type="string"
548
- readOnly
549
- default={defaultValue?.shorthand}
550
- title="商品和服务分类简称"
551
- />
552
- <Field
553
- name="taxRate"
554
- type="string"
555
- title="税率"
556
- x-component-props={{ disabled: readOnlyTaxRate }}
557
- default={defaultValue?.taxRate ?? 0}
558
- enum={formattedTaxRateList}
559
- x-rules={[{ message: '请选择税率', required: true }]}
560
- />
561
- {taxRate === 0 && isTaxFreeTypeNeeded &&
562
- <Field
563
- name="taxFreeType"
564
- type="string"
565
- title="免税类型"
566
- x-component-props={{ disabled: readOnlyTaxRate }}
567
- default={defaultValue?.taxFreeType}
568
- enum={taxFreeTypeList}
569
- x-rules={[{ message: '请选择免税类型', required: true }]}
570
- />
571
- }
572
- <Field
573
- name="favouredPolicyMark"
574
- type="number"
575
- title="是否享受优惠政策"
576
- x-component-props={{ disabled: readOnlyFavouredPolicy }}
577
- enum={[
578
- { label: '是', value: 1 },
579
- { label: '否', value: 0 },
580
- ]}
581
- default={defaultValue?.favouredPolicyMark ?? 0}
582
- x-rules={[{ message: '请选择是否享受优惠政策', required: true }]}
583
- />
584
- {favouredPolicyMark === 1 &&
585
- <Field
586
- name="favouredPolicyName"
587
- type="string"
588
- title="优惠政策类型"
589
- x-component-props={{ disabled: readOnlyFavouredPolicy }}
590
- enum={favouredPolicyNameList}
591
- default={defaultValue?.favouredPolicyName}
592
- x-rules={[{ message: '请选择是否享受优惠政策', required: true }]}
593
- />
594
- }
595
- </FormButtonGroup>
596
-
597
- <span className="kts-invoice-operate-goods-endow-code-button-list">
598
- <Button onClick={() => { actions.submit(onSubmit) }} type="primary">
599
- 确定
600
- </Button>
601
- <Button onClick={() => { controller.pipeline(async s => (s.goodsListState.endowCode.endowcodeGoodIndex = []))() }}>
602
- 取消
603
- </Button>
604
- </span>
605
- </SchemaForm>
606
- );
607
- };
608
-
609
- const components = {
610
- string: Input,
611
- number: NumberPicker,
612
- };
1
+ import React from 'react';
2
+ import Invoice from '../../..';
3
+ import { Button, Drawer, Select, Modal, Input as InputAntd, Form, Tree, message } from 'kts-components-antd-x3';
4
+ import { chain, bignumber } from 'mathjs';
5
+ import { Input, NumberPicker } from '@formily/antd-components';
6
+ import { format15 } from '../GoodsList/hook/useColumns/autoFillFn';
7
+ import { LineAttributeType } from '../../../InvoiceController';
8
+ import IGood from '../../../InvoiceController/InvoiceControllerState/GoodsListState/IGood';
9
+ import { countTaxAmount, countAmountExcludeTax, countPrice } from '../../../tools/calculate';
10
+ import { bytesLnegth, cutStr } from '../../../tools/strringFn';
11
+ import {
12
+ SchemaForm,
13
+ FormButtonGroup,
14
+ createAsyncFormActions,
15
+ SchemaMarkupField as Field,
16
+ FormEffectHooks,
17
+ } from '@formily/antd';
18
+ import './index.less';
19
+ import { TaxClassificationModal } from "../../../..";
20
+
21
+ const { TreeNode } = Tree;
22
+ const { confirm } = Modal;
23
+
24
+ export default () => {
25
+ const controller = Invoice.useInvoiceController();
26
+
27
+ const visible = controller.useMemo(s => s.goodsListState.endowCode.endowcodeGoodIndex.length > 0, []);
28
+
29
+ const [defaultValue, setDefaultValue] = React.useState<IGood>();
30
+
31
+ const onClose = React.useCallback(() => {
32
+ controller.pipeline(async (s) => {
33
+ s.goodsListState.endowCode.endowcodeGoodIndex = [];
34
+ })();
35
+ }, [controller]);
36
+ // React.useEffect(()=>{
37
+ // const a=chain(bignumber('21.00')).divide(bignumber('10.4999999999999123341231'))
38
+ // .done()
39
+ // .toString()
40
+ // console.log(a)
41
+ // },[])
42
+ // 计算赋码默认值
43
+ React.useEffect(() => {
44
+ if (visible) {
45
+ controller.pipeline(async s => {
46
+ const endowcodeGoodIndex = s.goodsListState.endowCode.endowcodeGoodIndex.filter(i => {
47
+ const good = s.goodsListState.goodsMap.get(i);
48
+ if (!good) return false;
49
+
50
+ return good.lineAttribute !== LineAttributeType.折扣行;
51
+ })
52
+
53
+ const good = s.goodsListState.goodsMap.get(s.goodsListState.endowCode.endowcodeGoodIndex[0]);
54
+ if (!good) return;
55
+
56
+ const getDefaultValue = s.goodsListState.endowCode.getDefaultValue;
57
+ if (getDefaultValue) {
58
+ setDefaultValue(await getDefaultValue({ ...good }, endowcodeGoodIndex.length));
59
+ } else {
60
+ if (endowcodeGoodIndex.length === 1) {
61
+ if (controller.state.goodsListState.isUpdateGoodsTaxRateList && controller.getGoodsTaxRateList && good.taxClassificationCode) {
62
+ const goodsTaxRateList = await controller.getGoodsTaxRateList(good.taxClassificationCode);
63
+ good.goodsTaxRateList = goodsTaxRateList;
64
+ // if (good.taxRate !== undefined && good.taxRate !== null && !goodsTaxRateList.includes(good.taxRate)) {
65
+ // good.taxRate = undefined;
66
+ // }
67
+ }
68
+ setDefaultValue(good);
69
+ } else {
70
+ setDefaultValue({ taxRate: good.taxRate } as any);
71
+ }
72
+ }
73
+ })()
74
+ } else {
75
+ setDefaultValue(undefined);
76
+ }
77
+ }, [visible])
78
+
79
+ return (
80
+ <Drawer
81
+ title="赋码"
82
+ placement="right"
83
+ destroyOnClose={true}
84
+ closable={false}
85
+ width={383}
86
+ onClose={onClose}
87
+ visible={visible}
88
+ >
89
+ {defaultValue && <DrawerBody defaultValue={defaultValue} />}
90
+ </Drawer>
91
+ );
92
+ };
93
+
94
+ const DrawerBody = (props: { defaultValue: IGood }) => {
95
+
96
+ const controller = Invoice.useInvoiceController();
97
+
98
+ const { defaultValue } = props;
99
+
100
+ const actions = React.useMemo(() => createAsyncFormActions(), []);
101
+
102
+ const taxClassificationProps = controller.useMemo(s => s.taxClassificationProps, []);
103
+
104
+ /** 免税类型 是否需要 */
105
+ const isTaxFreeTypeNeeded = controller.useMemo(s => s.goodsListState.endowCode.isTaxFreeTypeNeeded, []);
106
+
107
+ /** 税率 是否禁用 */
108
+ const readOnlyTaxRate = controller.useMemo(s => {
109
+ if (s.goodsListState.endowCode.getReadOnlyTaxRate) {
110
+ return s.goodsListState.endowCode.getReadOnlyTaxRate(s.goodsListState);
111
+ } else {
112
+ return false;
113
+ }
114
+ }, [])
115
+
116
+ /** 优惠政策 是否禁用 */
117
+ const readOnlyFavouredPolicy = controller.useMemo(s => {
118
+ if (s.goodsListState.endowCode.getReadOnlyFavouredPolicy) {
119
+ return s.goodsListState.endowCode.getReadOnlyFavouredPolicy(s.goodsListState);
120
+ } else {
121
+ return false;
122
+ }
123
+ }, [])
124
+
125
+ /** 税率列表 */
126
+ const taxRateList = controller.useMemo(s => s.goodsListState.taxRateList, []);
127
+
128
+ /** 免税类型 列表 */
129
+ const taxFreeTypeList = controller.useMemo(s => s.goodsListState.endowCode.taxFreeTypeList, []);
130
+
131
+ /** 优惠政策类型列表 */
132
+ const favouredPolicyNameList = controller.useMemo(s => s.goodsListState.endowCode.favouredPolicyNameList, []);
133
+
134
+ /** 优惠政策类型列表 */
135
+ // const getTaxCategoryCodeTree = controller.useMemo(s => s.goodsListState.endowCode.getTaxCategoryCodeTree, []);
136
+
137
+ /** 税率 */
138
+ const [taxRate, setTaxRate] = React.useState<number>(0);
139
+
140
+ /** 商品可用税率 */
141
+ const [goodsTaxRateList, setGoodsTaxRateList] = React.useState<number[] | null | undefined>(defaultValue.goodsTaxRateList);
142
+
143
+ const formattedTaxRateList = React.useMemo(() => {
144
+ return (goodsTaxRateList || taxRateList).map((e) => ({ label: `${e}%`, value: e }))
145
+ }, [goodsTaxRateList, taxRateList])
146
+
147
+ /** 税收分类编码 选择组件 */
148
+ const ShowSearch = React.useCallback(props => {
149
+
150
+ const [dataSource, setDataSource] = React.useState<any[]>([]);
151
+
152
+ const onSearch = React.useCallback(async e => {
153
+ const arr = await controller.state.goodsListState.endowCode.getTaxCategoryCodeList(e);
154
+ setDataSource(arr);
155
+ }, [])
156
+
157
+ const onChange = React.useCallback((value: string) => {
158
+ if (props.onChange) {
159
+ props.onChange(value);
160
+ }
161
+
162
+ const info = dataSource.filter(i => i.value === value)[0];
163
+ if (!info) return;
164
+
165
+ // !readOnlyTaxRate && actions.setFieldState('taxRate', async s => {
166
+ // if (info.taxRate || info.taxRate === 0) {
167
+ // s.value = info.taxRate
168
+ // }
169
+ // });
170
+
171
+ actions.setFieldState('shorthand', async (s) => {
172
+ if (info.shorthand) {
173
+ s.value = info.shorthand
174
+ }
175
+ });
176
+ }, [actions, dataSource, readOnlyTaxRate])
177
+
178
+ return (
179
+ <Select
180
+ {...props}
181
+ showSearch
182
+ showArrow={false}
183
+ notFoundContent={null}
184
+ filterOption={false}
185
+ onSearch={onSearch}
186
+ onChange={onChange}
187
+ >
188
+ {dataSource.map(e => <Select.Option key={e.value} value={e.value}>{e.label}</Select.Option>)}
189
+ </Select>
190
+ )
191
+ }, [controller, actions])
192
+
193
+ /** 税收分类编码 选择组件2 */
194
+ const ShowSearch2 = React.useCallback(props => {
195
+
196
+ // 是否显示
197
+ const [visible, setVisible] = React.useState(false);
198
+
199
+ // 税收分类编码树
200
+ const [list, setList] = React.useState<any[]>();
201
+
202
+ // 搜索条件
203
+ const [filter, setFilter] = React.useState<{
204
+ /** 税收分类编码 */
205
+ taxCategoryCode?: string,
206
+
207
+ /** 货物和劳务名称/简称 */
208
+ val?: string
209
+ }>();
210
+
211
+ /** 创建 树节点 */
212
+ const createTreeNode = React.useCallback(() => {
213
+ if (!list) return <></>;
214
+
215
+ return ctn(list);
216
+
217
+ function title(label: string) {
218
+ if (!filter) return label;
219
+ label = (filter.taxCategoryCode ? label.split(new RegExp(filter.taxCategoryCode, 'g')) : [label]).join(`<span style="color: #1890ff;">${filter.taxCategoryCode}</span>`);
220
+ label = (filter.val ? label.split(new RegExp(filter.val, 'g')) : [label]).join(`<span style="color: #1890ff;">${filter.val}</span>`);
221
+ return <span dangerouslySetInnerHTML={{ __html: label }} />
222
+ }
223
+
224
+ function ctn(l: any[], p = '0') {
225
+ if (!l || !l.length) return [<></>];
226
+ return l.filter(e => e.pid === p).map(e => {
227
+ return (
228
+ <TreeNode title={title(e.label)} key={e.id}>
229
+ {ctn(l, e.id)}
230
+ </TreeNode>
231
+ )
232
+ })
233
+ }
234
+ }, [list, filter])
235
+
236
+ /** 点击了节点 */
237
+ const onSelect = React.useCallback((e: string[]) => {
238
+ const id = e[0];
239
+
240
+ // 是否叶子节点
241
+ if (list?.filter(e => e.pid === id).length !== 0) { return; }
242
+
243
+ const info = list?.filter(e => e.id === id)[0];
244
+
245
+ // !readOnlyTaxRate && actions.setFieldState('taxRate', async s => {
246
+ // if (info.taxRate || info.taxRate === 0) {
247
+ // s.value = info.taxRate
248
+ // }
249
+ // });
250
+
251
+ actions.setFieldState('taxClassificationCode', async s => {
252
+ if (info.id) {
253
+ s.value = info.id
254
+ }
255
+ });
256
+
257
+ actions.setFieldState('shorthand', async (s) => {
258
+ if (info.shorthand) {
259
+ s.value = info.shorthand
260
+ }
261
+ });
262
+
263
+ setVisible(false);
264
+ }, [list, actions, readOnlyTaxRate])
265
+
266
+ React.useEffect(() => {
267
+ (async () => {
268
+ const fn = controller.state.goodsListState.endowCode.getTaxCategoryCodeTree || (async () => []);
269
+ const list = await fn(filter?.taxCategoryCode, filter?.val);
270
+ setList(list || []);
271
+ })()
272
+ }, [filter])
273
+
274
+ React.useEffect(() => {
275
+ if (visible) {
276
+ setList([])
277
+ }
278
+ }, [visible])
279
+
280
+ return (
281
+ <>
282
+ <InputAntd readOnly value={props.value} addonAfter={<Button size="small" type="link" onClick={() => { setVisible(true) }} >点击选择</Button>} />
283
+ <Drawer
284
+ title="税收分类编码"
285
+ visible={visible}
286
+ width={500}
287
+ onClose={() => { setVisible(false) }}
288
+ >
289
+ <Form key={`${visible}`} >
290
+ <Form.Item label="产品或服务简称" >
291
+ <InputAntd onChange={e => { setFilter({ ...filter, val: e.target.value }) }} />
292
+ </Form.Item>
293
+ <Form.Item label="税收分类编码">
294
+ <InputAntd onChange={e => { setFilter({ ...filter, taxCategoryCode: e.target.value }) }} />
295
+ </Form.Item>
296
+ </Form>
297
+ {
298
+ (list && list.length > 0)
299
+ ? <Tree
300
+ defaultExpandAll
301
+ selectedKeys={[]}
302
+ onSelect={onSelect}
303
+ >
304
+ {createTreeNode()}
305
+ </Tree>
306
+ : <span style={{ color: '#00000073' }} >请输入“产品或服务简称”或“税收分类编码”查找数据。</span>
307
+ }
308
+ </Drawer>
309
+ </>
310
+ )
311
+ }, [controller, actions])
312
+
313
+ /** 税收分类编码 选择组件3 */
314
+ const ShowSearch3 = React.useCallback(props => {
315
+ const [open, setOpen] = React.useState(false);
316
+
317
+ const [list, setList] = React.useState<any>([]);
318
+
319
+ const onSearch = React.useCallback(async (value: any = null) => {
320
+ if(value?.target?.value){
321
+ const arr = await controller.state.goodsListState.endowCode.onSearchTaxClassificationCode(value?.target?.value);
322
+ const list: any[] = arr.map((item: any)=> {
323
+ return {
324
+ ...item,
325
+ title: `${item.productName} ${item.taxCategoryCode}`,
326
+ key: item.taxCategoryCode,
327
+ isLeaf: true
328
+ }
329
+ });
330
+ setList(list);
331
+ } else {
332
+ await onLoad();
333
+ }
334
+ }, []);
335
+
336
+ const onLoad = React.useCallback(async (value?: any) => {
337
+ const arr = await controller.state.goodsListState.endowCode.onLoadTaxClassificationCode(value?.taxCategoryCode);
338
+ const data: any[] = arr.map((item: any)=> {
339
+ return {
340
+ ...item,
341
+ title: `${item.productName} ${item.taxCategoryCode}`,
342
+ key: item.taxCategoryCode
343
+ }
344
+ });
345
+
346
+ const treeData = optimizeTreeData(data);
347
+
348
+ if(value?.key) {
349
+ setList((origin: any)=> {
350
+ updateTreeData(origin, value.key, treeData)
351
+ });
352
+ } else {
353
+ setList(treeData);
354
+ }
355
+ return [];
356
+ }, []);
357
+
358
+ const onClick = React.useCallback(async () => {
359
+ setOpen(true);
360
+ await onLoad();
361
+ }, []);
362
+ const onSubmit1 = React.useCallback((key: any, info: any) => {
363
+ // console.log('1231231231', key, info);
364
+ // 根据税编改变税率列表
365
+ // 如果只有一个,默认选中,有多个时,置空,用户手选
366
+ // if (controller.state.goodsListState.isUpdateGoodsTaxRateList) {
367
+ // if (info.node.taxRateList?.length) {
368
+ // setGoodsTaxRateList(info.node.taxRateList);
369
+ // }
370
+ // if (!readOnlyTaxRate) {
371
+ // actions.setFieldState('taxRate', async s => {
372
+ // if (info.node.taxRateList && info.node.taxRateList?.length === 1) {
373
+ // s.value = info.node.taxRateList[0]
374
+ // } else {
375
+ // s.value = undefined
376
+ // }
377
+ // });
378
+
379
+ // }
380
+ // }
381
+
382
+ // !readOnlyTaxRate && actions.setFieldState('taxRate', async s => {
383
+ // if (info.node.taxRate || info.taxRate === 0) {
384
+ // s.value = info.node.taxRate
385
+ // }
386
+ // });
387
+ let node = info.node || info;
388
+ actions.setFieldState('taxClassificationCode', async s => {
389
+ if(node.taxCategoryCode) {
390
+ s.value = node.taxCategoryCode
391
+ }
392
+ });
393
+
394
+ actions.setFieldState('shorthand', async (s) => {
395
+ if (node.shorthand){
396
+ s.value = node.shorthand
397
+ }
398
+ });
399
+ setOpen(false);
400
+ }, [controller, actions]);
401
+
402
+ const onSelect = React.useCallback((key: any, info: any) => {
403
+ let node = info.node || info;
404
+ if (controller.state.goodsListState.isUpdateGoodsTaxRateList) {
405
+ if (node.taxRateList?.length) {
406
+ setGoodsTaxRateList(node.taxRateList);
407
+ }
408
+ if (!readOnlyTaxRate) {
409
+ actions.setFieldState('taxRate', async s => {
410
+ if (node.taxRateList && node.taxRateList?.length === 1) {
411
+ s.value = node.taxRateList[0]
412
+ } else {
413
+ s.value = undefined
414
+ }
415
+ });
416
+
417
+ }
418
+ }
419
+ setInfo(info.node);
420
+ // setOpen(false);
421
+ }, [controller, actions]);
422
+
423
+ const optimizeTreeData = (data: any): any => {
424
+ return data.map((item: any)=> {
425
+ return {
426
+ ...item,
427
+ selectable: item?.hzx === 'N',
428
+ isLeaf: item?.hzx === 'N'
429
+ }
430
+ });
431
+ }
432
+
433
+ const updateTreeData = (list: any, key: React.Key, children: any): any => {
434
+ const data = list.map((node: any) => {
435
+ if (node.key === key) {
436
+ return {
437
+ ...node,
438
+ children
439
+ };
440
+ }
441
+ if (node.children) {
442
+ return {
443
+ ...node,
444
+ children: updateTreeData(node.children, key, children)
445
+ };
446
+ }
447
+ return node;
448
+ });
449
+ setList(data);
450
+ return data;
451
+ }
452
+ const [info, setInfo] = React.useState({});
453
+ return (
454
+ <>
455
+ <InputAntd readOnly onClick={onClick} value={props.value} />
456
+ <TaxClassificationModal
457
+ list={list}
458
+ open={open}
459
+ info={info}
460
+ onSelect={onSelect}
461
+ onSubmit={onSubmit1}
462
+ onCancel={()=> {setOpen(false); setInfo({})}}
463
+ onSearch={onSearch}
464
+ onLoad={onLoad}
465
+ />
466
+ </>
467
+ )
468
+ }, [controller, actions])
469
+
470
+ // 是否享受优惠政策
471
+ const [favouredPolicyMark, setFavouredPolicyMark] = React.useState<number>(0);
472
+
473
+ // 确定
474
+ const onSubmit = React.useCallback(values => {
475
+ controller.pipeline(async s => {
476
+
477
+ const endowCodeGood = s.goodsListState.endowCode.endowcodeGoodIndex.map(e => s.goodsListState.goodsMap.get(e));
478
+
479
+ // 赋码
480
+ endowCodeGood.forEach(good => {
481
+ if (!good) return;
482
+
483
+ good.shorthand = values.shorthand;
484
+ good.taxClassificationCode = values.taxClassificationCode;
485
+ good.taxRate = values.taxRate;
486
+ good.taxFreeType = values.taxFreeType;
487
+ good.favouredPolicyMark = values.favouredPolicyMark;
488
+ good.favouredPolicyName = values.favouredPolicyName;
489
+
490
+ // 无论是否含税,都保持价税合计不变
491
+ good.taxAmount = countTaxAmount(good.lineAmountIncludeTax || 0, s.goodsListState.deduction, values.taxRate);
492
+ if (good.taxAmount || good.taxAmount === 0 ) {
493
+ good.lineAmountExcludeTax = countAmountExcludeTax(good.lineAmountIncludeTax || 0, good.taxAmount);
494
+ }
495
+ if (good.lineAmountExcludeTax && good.quantity) {
496
+ good.priceExcludeTax = countPrice(good.lineAmountExcludeTax, good.quantity, controller.state.calculatingDigits) as any;
497
+ }
498
+
499
+ //赋值商品的可用税率
500
+ good.goodsTaxRateList = goodsTaxRateList;
501
+
502
+ });
503
+
504
+ s.goodsListState.goodsList = s.goodsListState.goodsList.slice();
505
+ s.goodsListState.endowCode.endowcodeGoodIndex = [];
506
+ })();
507
+ }, [controller, goodsTaxRateList]);
508
+
509
+ const effects = React.useCallback(() => {
510
+ // 税率变化
511
+ FormEffectHooks.onFieldValueChange$('taxRate').subscribe((e) => {
512
+ setTaxRate(e.value);
513
+ actions.setFieldState('taxFreeType', async (s) => {
514
+ if (e.value !== 0)
515
+ s.value = undefined;
516
+ });
517
+ });
518
+
519
+ // 是否享受优惠政策
520
+ FormEffectHooks.onFieldValueChange$('favouredPolicyMark').subscribe((e) => {
521
+ setFavouredPolicyMark(e.value);
522
+ actions.setFieldState('favouredPolicyName', async (s) => {
523
+ if (e.value === 0)
524
+ s.value = undefined;
525
+ });
526
+ });
527
+ }, [actions]);
528
+
529
+ // 更新 税收分类编码列表
530
+ React.useEffect(() => {
531
+ if (controller.getTaxCategoryCodeList) controller.getTaxCategoryCodeList();
532
+ }, [controller]);
533
+
534
+ return (
535
+ <SchemaForm actions={actions} previewPlaceholder=" " components={{ ...components, showSearch: !!controller.state.goodsListState.endowCode.onLoadTaxClassificationCode ? ShowSearch3 : ShowSearch }} effects={effects}>
536
+ <FormButtonGroup>
537
+ <Field
538
+ name="taxClassificationCode"
539
+ type="showSearch"
540
+ title="税收分类编码"
541
+ // enum={taxCategoryCodeList}
542
+ default={defaultValue?.taxClassificationCode}
543
+ x-rules={[{ message: '请选择税收分类编码', required: true }]}
544
+ />
545
+ <Field
546
+ name="shorthand"
547
+ type="string"
548
+ readOnly
549
+ default={defaultValue?.shorthand}
550
+ title="商品和服务分类简称"
551
+ />
552
+ <Field
553
+ name="taxRate"
554
+ type="string"
555
+ title="税率"
556
+ x-component-props={{ disabled: readOnlyTaxRate }}
557
+ default={defaultValue?.taxRate ?? 0}
558
+ enum={formattedTaxRateList}
559
+ x-rules={[{ message: '请选择税率', required: true }]}
560
+ />
561
+ {taxRate === 0 && isTaxFreeTypeNeeded &&
562
+ <Field
563
+ name="taxFreeType"
564
+ type="string"
565
+ title="免税类型"
566
+ x-component-props={{ disabled: readOnlyTaxRate }}
567
+ default={defaultValue?.taxFreeType}
568
+ enum={taxFreeTypeList}
569
+ x-rules={[{ message: '请选择免税类型', required: true }]}
570
+ />
571
+ }
572
+ <Field
573
+ name="favouredPolicyMark"
574
+ type="number"
575
+ title="是否享受优惠政策"
576
+ x-component-props={{ disabled: readOnlyFavouredPolicy }}
577
+ enum={[
578
+ { label: '是', value: 1 },
579
+ { label: '否', value: 0 },
580
+ ]}
581
+ default={defaultValue?.favouredPolicyMark ?? 0}
582
+ x-rules={[{ message: '请选择是否享受优惠政策', required: true }]}
583
+ />
584
+ {favouredPolicyMark === 1 &&
585
+ <Field
586
+ name="favouredPolicyName"
587
+ type="string"
588
+ title="优惠政策类型"
589
+ x-component-props={{ disabled: readOnlyFavouredPolicy }}
590
+ enum={favouredPolicyNameList}
591
+ default={defaultValue?.favouredPolicyName}
592
+ x-rules={[{ message: '请选择是否享受优惠政策', required: true }]}
593
+ />
594
+ }
595
+ </FormButtonGroup>
596
+
597
+ <span className="kts-invoice-operate-goods-endow-code-button-list">
598
+ <Button onClick={() => { actions.submit(onSubmit) }} type="primary">
599
+ 确定
600
+ </Button>
601
+ <Button onClick={() => { controller.pipeline(async s => (s.goodsListState.endowCode.endowcodeGoodIndex = []))() }}>
602
+ 取消
603
+ </Button>
604
+ </span>
605
+ </SchemaForm>
606
+ );
607
+ };
608
+
609
+ const components = {
610
+ string: Input,
611
+ number: NumberPicker,
612
+ };