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,453 +1,453 @@
1
-
2
- import React from 'react';
3
- import Icon from '@ant-design/icons';
4
- import { decorator } from "grey-react-box";
5
- import { Form } from "kts-components-antd-x3";
6
- import { AutoComplete, Button, Checkbox, Col, Input, InputProps, Row, Tooltip } from 'kts-xui'
7
- import { CheckboxChangeEvent } from 'kts-components-antd-x4/lib/checkbox';
8
- import { FormComponentProps } from "kts-components-antd-x3/lib/form";
9
- import { WrappedFormUtils } from 'kts-components-antd-x3/lib/form/Form';
10
- import { ReactComponent as ArrowUpSvg } from './svg/arrowUp.svg';
11
- import { ReactComponent as ArrowDownSvg } from './svg/arrowDown.svg';
12
- import { ReactComponent as PlusSvg } from './svg/plus.svg'
13
- import InvoiceController from "../../../InvoiceController";
14
- import Invoice from "../../../../Invoice";
15
- import './index.less';
16
- import classNames from 'classnames';
17
-
18
- const RULES = {
19
- companyName: (label: string) => [
20
- { required: true, message: `${label}必填` },
21
- { max: 100, message: `${label}内容超长` }
22
- ],
23
- taxId: (label: string) => [
24
- { max: 20, message: `${label}内容超长` },
25
- { pattern: /^([a-zA-Z0-9])*$/g, message: `${label}仅能数字、英文` }
26
- ],
27
- buyerTelPhone: (label: string) => [
28
- { max: 100, message: `${label}内容超长` },
29
- { pattern: /^[0-9\s\-\+]+$/g, message: `${label}仅能数字、空格、-、+` }
30
- ],
31
- sellerTelPhone: (label: string) => [
32
- { required: true, message: `${label}必填` },
33
- { max: 100, message: `${label}内容超长` },
34
- { pattern: /^[0-9\s\-\+]+$/g, message: `${label}仅能数字、空格、-、+` }
35
- ],
36
- bankName: (label: string) => [
37
- { max: 100, message: `${label}内容超长` }
38
- ],
39
- bankAccount: (label: string) => [
40
- { max: 100, message: `${label}内容超长` },
41
- { pattern: /^([0-9a-zA-Z-\s])*$/g, message: `${label}仅能数字、字母、-、空格` }
42
- ]
43
- }
44
-
45
- const formatCompanyName = (e: any) => {
46
- const value = e?.target?.value;
47
- if (value) {
48
- return value.replace('(', '(').replace(')', ')').replace(' ', '');
49
- }
50
- }
51
-
52
- export interface IStakeholder {
53
-
54
- /** 是否显示导入按钮 */
55
- isShowImportButton?: boolean;
56
-
57
- /** 点击了 */
58
- onClickImportButton?: (e: InvoiceController) => void;
59
-
60
- /** 查看当前可用授信额度 */
61
- lineCredit?: React.ReactNode;
62
-
63
- /** 票种类型 */
64
- isVatNormal?: boolean;
65
-
66
- /** 是否可以选择自然人 */
67
- isNaturalPerson?: boolean;
68
-
69
- /** 是否展开 */
70
- isExpand?: boolean;
71
-
72
- /** 购方,销方银行信息 勾选按钮是否显示 **/
73
- leqi?: boolean;
74
-
75
- /** 购方,销方地址电话 勾选按钮是否显示 **/
76
- riskData?: boolean;
77
-
78
- invoiceMarkCallback?: (value: any) => void;
79
- }
80
-
81
- /** 干系人 */
82
- export default decorator<IStakeholder, IStakeholder & FormComponentProps>(Form.create())(props => {
83
-
84
- const { form, isShowImportButton, onClickImportButton, isVatNormal = false } = props;
85
-
86
- const [isExpand, setExpand] = React.useState(typeof props.isExpand === 'boolean' ? props.isExpand : true);
87
-
88
- const { getFieldDecorator } = form;
89
-
90
- const controller = Invoice.useInvoiceController();
91
-
92
- const model = controller.useMemo(s => s.model, []);
93
-
94
- const disableds = controller.useMemo(s => s.stakeholder.disableds || [], []);
95
-
96
- const rulesMap = controller.useMemo(s => s.stakeholder.rulesMap || {}, []);
97
- /** 乐企 */
98
- const leqispanW = React.useMemo(() => {
99
- if (props.leqi) {
100
- return 0;
101
- } else {
102
- return 2;
103
- }
104
- }, [props.leqi, props.riskData]);
105
- /** 直连 */
106
- const riskspanW = React.useMemo(() => {
107
- if (props.riskData) {
108
- return 0;
109
- } else {
110
- return 2;
111
- }
112
- }, [props.leqi, props.riskData]);
113
- const readOnly = React.useMemo(() => {
114
- if (model === 'readOnly') return true;
115
- if (model === 'prefab') return true;
116
- return false;
117
- }, [model]);
118
-
119
- const onExpand = React.useCallback(() => { setExpand(e => !e) }, []);
120
-
121
- const isReadOnly = React.useCallback(field => readOnly || disableds.indexOf(field) >= 0, [disableds, readOnly]);
122
-
123
- const getRules = React.useCallback((field, defaultRules) => {
124
- if (isReadOnly(field)) return [];
125
- return rulesMap[field] || defaultRules;
126
- }, [rulesMap, isReadOnly, isReadOnly]);
127
-
128
- controller.useForm('stakeholder', form);
129
-
130
- // props.isExpand 变化的时候更新
131
- React.useEffect(() => {
132
- setExpand(typeof props.isExpand === 'boolean' ? props.isExpand : true);
133
- }, [props.isExpand])
134
-
135
- return (
136
- <div className={classNames("kts-invoice-operate-invoice-digtal-stakeholder", { readOnly: readOnly })} >
137
- <div>
138
- {'购买方信息'.split('').map(e => <span>{e}</span>)}
139
- {
140
- !readOnly &&
141
- <Icon
142
- className="digtal-stakeholder-expand-button"
143
- component={isExpand ? ArrowUpSvg : ArrowDownSvg}
144
- onClick={onExpand}
145
- />
146
- }
147
- </div>
148
- <div>
149
- <div style={{ marginTop: 20 }} className='natural-person-flag' >
150
- {
151
- props.isNaturalPerson === true &&
152
- <Form.Item colon={false}>
153
- {getFieldDecorator('naturalPersonFlag', {
154
- })(
155
- <NaturalPersonFlag readOnly={isReadOnly('naturalPersonFlag')} />
156
- )}
157
- </Form.Item>
158
- }
159
- </div>
160
- <Form className="digtal-stakeholder-form" >
161
- <Row gutter={[16, 0]}>
162
- <Col span={24} >
163
- <Form.Item label='名称' colon={false}>
164
- {getFieldDecorator('buyerName', {
165
- rules: getRules('buyerName', RULES.companyName('购买方名称')),
166
- })(
167
- <BuyerNameInput
168
- myform={form}
169
- fieldName='buyerName'
170
- readOnly={isReadOnly('buyerName')}
171
- placeholder="请输入名称"
172
- autoComplete="off"
173
- suffix={
174
- isShowImportButton === true &&
175
- <Button
176
- type='link'
177
- style={{ padding: 0, width: 20, height: '100%' }}
178
- icon={<Icon component={PlusSvg} />}
179
- onClick={() => { onClickImportButton && onClickImportButton(controller) }}
180
- />
181
- }
182
- />
183
- )}
184
- </Form.Item>
185
- </Col>
186
-
187
- <Col span={24} >
188
- <Form.Item label='统一社会信用代码/纳税人识别号' colon={false}>
189
- {getFieldDecorator('buyerTaxId', {
190
- rules: getRules('buyerTaxId', [{ required: !isVatNormal, message: '购买方纳税人识别号必填' }, ...RULES.taxId('购买方纳税人识别号')])
191
- })(
192
- <BuyerNameInput
193
- myform={form}
194
- fieldName='buyerTaxId'
195
- readOnly={isReadOnly('buyerTaxId')}
196
- placeholder="请输入统一社会信用代码/纳税人识别号"
197
- autoComplete="off"
198
- />
199
- )}
200
- </Form.Item>
201
- </Col>
202
-
203
- <Col span={10+leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
204
- <Form.Item label='购买方地址' colon={false}>
205
- {getFieldDecorator('buyerAddress', {
206
- rules: getRules('buyerAddress', [{ max: 100, message: '购买方地址内容超长' }])
207
- })(<MyInput readOnly={isReadOnly('buyerAddress')} placeholder="请输入购买方地址" autoComplete="off" />)}
208
- </Form.Item>
209
- </Col>
210
-
211
- <Col span={10+leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
212
- <Form.Item label='电话' colon={false} className='telephone'>
213
- {getFieldDecorator('buyerPhone', {
214
- rules: getRules('buyerPhone', RULES.buyerTelPhone('购买方电话'))
215
- })(<MyInput readOnly={isReadOnly('buyerPhone')} placeholder="请输入电话" autoComplete="off" />)}
216
- </Form.Item>
217
- </Col>
218
- {(props.leqi) &&
219
- <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
220
- <Form.Item colon={false}>
221
- {getFieldDecorator('buyerAddressPhoneFlag', {
222
- valuePropName: 'checked',
223
- })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('buyerAddressPhoneFlag')} style={{whiteSpace:'nowrap'}}>是否展示</Checkbox>)}
224
- </Form.Item>
225
- </Col>
226
- }
227
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
228
- <Form.Item label='购买方开户银行' colon={false}>
229
- {getFieldDecorator('buyerBank', {
230
- rules: getRules('buyerBank', RULES.bankName('购买方开户银行'))
231
- })(<MyInput readOnly={isReadOnly('buyerBank')} placeholder="请输入购买方开户银行" autoComplete="off" />)}
232
- </Form.Item>
233
- </Col>
234
-
235
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
236
- <Form.Item label='银行账号' colon={false}>
237
- {getFieldDecorator('buyerAccount', {
238
- rules: getRules('buyerAccount', RULES.bankAccount('购买方银行账号'))
239
- })(<MyInput readOnly={isReadOnly('buyerAccount')} placeholder="请输入银行账号" autoComplete="off" />)}
240
- </Form.Item>
241
- </Col>
242
- {(props.leqi) &&
243
- <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
244
- <Form.Item colon={false}>
245
- {getFieldDecorator('buyerBankAccountFlag', {
246
- valuePropName: 'checked',
247
- })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('buyerBankAccountFlag')} style={{whiteSpace:'nowrap'}}>是否展示</Checkbox>)}
248
- </Form.Item>
249
- </Col>
250
- }
251
- </Row>
252
- </Form>
253
- </div>
254
- <div>
255
- {'销售方信息'.split('').map(e => <span>{e}</span>)}
256
- {
257
- !readOnly &&
258
- <Icon
259
- className="digtal-stakeholder-expand-button"
260
- component={isExpand ? ArrowUpSvg : ArrowDownSvg}
261
- onClick={onExpand}
262
- />
263
- }
264
- </div>
265
- <div>
266
- {
267
- !readOnly && props.lineCredit &&
268
- <div style={{ marginTop: 20 }} >
269
- <Tooltip trigger="click" title={props.lineCredit} >
270
- <Button type="link" style={{ padding: `0px 8px` }} >查看当前可用授信额度</Button>
271
- </Tooltip>
272
- </div>
273
- }
274
- <Form className="digtal-stakeholder-form" >
275
- <Row gutter={[16, 0]}>
276
- <Col span={24} >
277
- <Form.Item label='名称' colon={false}>
278
- {getFieldDecorator('supplierName', {
279
- rules: getRules('supplierName', RULES.companyName('销售方名称')),
280
- getValueFromEvent: formatCompanyName
281
- })(<MyInput readOnly={isReadOnly('supplierName')} placeholder="请输入名称" autoComplete="off" />)}
282
- </Form.Item>
283
- </Col>
284
-
285
- <Col span={24} >
286
- <Form.Item label='统一社会信用代码/纳税人识别号' colon={false}>
287
- {getFieldDecorator('supplierTaxId', {
288
- rules: getRules('supplierTaxId', [{ required: true, message: '销售方纳税人识别号必填' }, ...RULES.taxId('销售方纳税人识别号')])
289
- })(<MyInput readOnly={isReadOnly('supplierTaxId')} placeholder="请输入统一社会信用代码/纳税人识别号" autoComplete="off" />)}
290
- </Form.Item>
291
- </Col>
292
-
293
- <Col span={10+leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
294
- <Form.Item label='销售方地址' colon={false}>
295
- {getFieldDecorator('sellerAddress', {
296
- rules: getRules('sellerAddress', [{ max: 300, message: '销售方地址内容超长' }])
297
- })(<MyInput readOnly={isReadOnly('sellerAddress')} placeholder="请输入销售方地址" autoComplete="off" />)}
298
- </Form.Item>
299
- </Col>
300
-
301
- <Col span={10+leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
302
- <Form.Item label='电话' colon={false} className='telephone' >
303
- {getFieldDecorator('sellerPhone', {
304
- rules: getRules('sellerPhone', RULES.sellerTelPhone('销售方电话'))
305
- })(<MyInput readOnly={isReadOnly('sellerPhone')} placeholder="请输入电话" autoComplete="off" />)}
306
- </Form.Item>
307
- </Col>
308
- {(props.leqi) &&
309
- <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
310
- <Form.Item colon={false}>
311
- {getFieldDecorator('sellerAddressPhoneFlag', {
312
- valuePropName: 'checked',
313
- })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('sellerAddressPhoneFlag')} style={{whiteSpace:'nowrap'}}>是否展示</Checkbox>)}
314
- </Form.Item>
315
- </Col>
316
- }
317
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
318
- <Form.Item label='销售方开户银行' colon={false}>
319
- {getFieldDecorator('sellerBank', {
320
- rules: getRules('sellerBank', RULES.bankName('销售方开户银行'))
321
- })(<MyInput readOnly={isReadOnly('sellerBank')} placeholder="请输入销售方开户银行" autoComplete="off" />)}
322
- </Form.Item>
323
- </Col>
324
-
325
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
326
- <Form.Item label='银行账号' colon={false}>
327
- {getFieldDecorator('sellerAccount', {
328
- rules: getRules('sellerAccount', RULES.bankAccount('销售方银行账号'))
329
- })(<MyInput readOnly={isReadOnly('sellerAccount')} placeholder="请输入银行账号" autoComplete="off" />)}
330
- </Form.Item>
331
- </Col>
332
- {(props.leqi ) &&
333
- <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
334
- <Form.Item colon={false}>
335
- {getFieldDecorator('sellerBankAccountFlag', {
336
- valuePropName: 'checked',
337
- })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('sellerBankAccountFlag')} style={{whiteSpace:'nowrap'}}>是否展示</Checkbox>)}
338
- </Form.Item>
339
- </Col>
340
- }
341
- </Row>
342
- </Form>
343
- </div>
344
- </div>
345
- )
346
- })
347
-
348
- function NaturalPersonFlag(props: {
349
- // NATURAL("自然人"), COMPANY("非自然人");
350
- value?: 'COMPANY' | 'NATURAL',
351
- onChange?: (e: 'COMPANY' | 'NATURAL') => void
352
- readOnly?: boolean;
353
- }) {
354
-
355
- const [value, setValue] = React.useState(props.value || 'COMPANY');
356
-
357
- const onChange = React.useCallback((e: CheckboxChangeEvent) => {
358
- if (props.readOnly) return;
359
- setValue(e.target.checked ? 'NATURAL' : 'COMPANY');
360
- props.onChange && props.onChange(e.target.checked ? 'NATURAL' : 'COMPANY');
361
- }, [props.onChange, props.readOnly])
362
-
363
- React.useEffect(() => {
364
- setValue(props.value || 'COMPANY')
365
- }, [props.value])
366
-
367
- return (
368
- <Checkbox
369
- disabled={props.readOnly}
370
- checked={value === 'NATURAL'}
371
- onChange={onChange}
372
- >
373
- 是否开票给自然人
374
- </Checkbox>
375
- )
376
- }
377
-
378
- function BuyerNameInput(props: InputProps & { fieldName: string; myform: WrappedFormUtils<any> }) {
379
-
380
- const { fieldName, myform: form } = props;
381
-
382
- const controller = Invoice.useInvoiceController();
383
-
384
- const rootElement = controller.useMemo(s => s.rootElement, []);
385
-
386
- const autoComplete = controller.useMemo(s => s.autoComplete, [])
387
-
388
- const [options, setOptions] = React.useState<any[]>([])
389
-
390
- const onChangeAutoComplete = React.useCallback(value => {
391
- const record = options.filter(e => e[fieldName] === value)[0] as any;
392
- if (!record || !form) return;
393
-
394
- form.setFieldsValue(record);
395
- setOptions([])
396
- }, [options, fieldName, form])
397
-
398
- const onSearch = React.useCallback(async (searchText: string) => {
399
- await Discontinue.start();
400
- try {
401
- if (fieldName === 'buyerName') {
402
- if (autoComplete.onBuyerNameSearch) {
403
- setOptions(await autoComplete.onBuyerNameSearch(searchText));
404
- }
405
- } else if (fieldName === 'buyerTaxId') {
406
- if (autoComplete.onBuyerTaxIdSearch) {
407
- setOptions(await autoComplete.onBuyerTaxIdSearch(searchText));
408
- }
409
- }
410
-
411
- } catch (error) {
412
- setOptions([]);
413
- throw error;
414
- }
415
- }, [autoComplete.onBuyerNameSearch, fieldName])
416
-
417
- if (props.readOnly) return <span className='digtal-stakeholder-form-text'>{props.value}</span>;
418
-
419
- return (
420
- <AutoComplete
421
- onSearch={onSearch}
422
- options={options.map(e => ({ value: e[fieldName] }))}
423
- onChange={onChangeAutoComplete}
424
- value={props.value}
425
- getPopupContainer={() => rootElement || document.body}
426
- style={{ width: '100%' }}
427
- >
428
- <Input {...props} style={{ width: '100%', ...props.style }} />
429
- </AutoComplete>
430
- )
431
- }
432
-
433
- class MyInput extends React.Component<InputProps> {
434
- render() {
435
- const props = this.props;
436
- if (props.readOnly) {
437
- return <span className='digtal-stakeholder-form-text'>{props.value}</span>
438
- } else {
439
- return <Input {...props} />
440
- }
441
- }
442
- }
443
-
444
- class Discontinue {
445
-
446
- private static timer: any;
447
-
448
- static start = (interval = 200) => new Promise<void>(resolve => {
449
- clearTimeout(Discontinue.timer);
450
- Discontinue.timer = setTimeout(resolve, interval);
451
- })
452
- }
453
-
1
+
2
+ import React from 'react';
3
+ import Icon from '@ant-design/icons';
4
+ import { decorator } from "grey-react-box";
5
+ import { Form } from "kts-components-antd-x3";
6
+ import { AutoComplete, Button, Checkbox, Col, Input, InputProps, Row, Tooltip } from 'kts-xui'
7
+ import { CheckboxChangeEvent } from 'kts-components-antd-x4/lib/checkbox';
8
+ import { FormComponentProps } from "kts-components-antd-x3/lib/form";
9
+ import { WrappedFormUtils } from 'kts-components-antd-x3/lib/form/Form';
10
+ import { ReactComponent as ArrowUpSvg } from './svg/arrowUp.svg';
11
+ import { ReactComponent as ArrowDownSvg } from './svg/arrowDown.svg';
12
+ import { ReactComponent as PlusSvg } from './svg/plus.svg'
13
+ import InvoiceController from "../../../InvoiceController";
14
+ import Invoice from "../../../../Invoice";
15
+ import './index.less';
16
+ import classNames from 'classnames';
17
+
18
+ const RULES = {
19
+ companyName: (label: string) => [
20
+ { required: true, message: `${label}必填` },
21
+ { max: 100, message: `${label}内容超长` }
22
+ ],
23
+ taxId: (label: string) => [
24
+ { max: 20, message: `${label}内容超长` },
25
+ { pattern: /^([a-zA-Z0-9])*$/g, message: `${label}仅能数字、英文` }
26
+ ],
27
+ buyerTelPhone: (label: string) => [
28
+ { max: 100, message: `${label}内容超长` },
29
+ { pattern: /^[0-9\s\-\+]+$/g, message: `${label}仅能数字、空格、-、+` }
30
+ ],
31
+ sellerTelPhone: (label: string) => [
32
+ { required: true, message: `${label}必填` },
33
+ { max: 100, message: `${label}内容超长` },
34
+ { pattern: /^[0-9\s\-\+]+$/g, message: `${label}仅能数字、空格、-、+` }
35
+ ],
36
+ bankName: (label: string) => [
37
+ { max: 100, message: `${label}内容超长` }
38
+ ],
39
+ bankAccount: (label: string) => [
40
+ { max: 100, message: `${label}内容超长` },
41
+ { pattern: /^([0-9a-zA-Z-\s])*$/g, message: `${label}仅能数字、字母、-、空格` }
42
+ ]
43
+ }
44
+
45
+ const formatCompanyName = (e: any) => {
46
+ const value = e?.target?.value;
47
+ if (value) {
48
+ return value.replace('(', '(').replace(')', ')').replace(' ', '');
49
+ }
50
+ }
51
+
52
+ export interface IStakeholder {
53
+
54
+ /** 是否显示导入按钮 */
55
+ isShowImportButton?: boolean;
56
+
57
+ /** 点击了 */
58
+ onClickImportButton?: (e: InvoiceController) => void;
59
+
60
+ /** 查看当前可用授信额度 */
61
+ lineCredit?: React.ReactNode;
62
+
63
+ /** 票种类型 */
64
+ isVatNormal?: boolean;
65
+
66
+ /** 是否可以选择自然人 */
67
+ isNaturalPerson?: boolean;
68
+
69
+ /** 是否展开 */
70
+ isExpand?: boolean;
71
+
72
+ /** 购方,销方银行信息 勾选按钮是否显示 **/
73
+ leqi?: boolean;
74
+
75
+ /** 购方,销方地址电话 勾选按钮是否显示 **/
76
+ riskData?: boolean;
77
+
78
+ invoiceMarkCallback?: (value: any) => void;
79
+ }
80
+
81
+ /** 干系人 */
82
+ export default decorator<IStakeholder, IStakeholder & FormComponentProps>(Form.create())(props => {
83
+
84
+ const { form, isShowImportButton, onClickImportButton, isVatNormal = false } = props;
85
+
86
+ const [isExpand, setExpand] = React.useState(typeof props.isExpand === 'boolean' ? props.isExpand : true);
87
+
88
+ const { getFieldDecorator } = form;
89
+
90
+ const controller = Invoice.useInvoiceController();
91
+
92
+ const model = controller.useMemo(s => s.model, []);
93
+
94
+ const disableds = controller.useMemo(s => s.stakeholder.disableds || [], []);
95
+
96
+ const rulesMap = controller.useMemo(s => s.stakeholder.rulesMap || {}, []);
97
+ /** 乐企 */
98
+ const leqispanW = React.useMemo(() => {
99
+ if (props.leqi) {
100
+ return 0;
101
+ } else {
102
+ return 2;
103
+ }
104
+ }, [props.leqi, props.riskData]);
105
+ /** 直连 */
106
+ const riskspanW = React.useMemo(() => {
107
+ if (props.riskData) {
108
+ return 0;
109
+ } else {
110
+ return 2;
111
+ }
112
+ }, [props.leqi, props.riskData]);
113
+ const readOnly = React.useMemo(() => {
114
+ if (model === 'readOnly') return true;
115
+ if (model === 'prefab') return true;
116
+ return false;
117
+ }, [model]);
118
+
119
+ const onExpand = React.useCallback(() => { setExpand(e => !e) }, []);
120
+
121
+ const isReadOnly = React.useCallback(field => readOnly || disableds.indexOf(field) >= 0, [disableds, readOnly]);
122
+
123
+ const getRules = React.useCallback((field, defaultRules) => {
124
+ if (isReadOnly(field)) return [];
125
+ return rulesMap[field] || defaultRules;
126
+ }, [rulesMap, isReadOnly, isReadOnly]);
127
+
128
+ controller.useForm('stakeholder', form);
129
+
130
+ // props.isExpand 变化的时候更新
131
+ React.useEffect(() => {
132
+ setExpand(typeof props.isExpand === 'boolean' ? props.isExpand : true);
133
+ }, [props.isExpand])
134
+
135
+ return (
136
+ <div className={classNames("kts-invoice-operate-invoice-digtal-stakeholder", { readOnly: readOnly })} >
137
+ <div>
138
+ {'购买方信息'.split('').map(e => <span>{e}</span>)}
139
+ {
140
+ !readOnly &&
141
+ <Icon
142
+ className="digtal-stakeholder-expand-button"
143
+ component={isExpand ? ArrowUpSvg : ArrowDownSvg}
144
+ onClick={onExpand}
145
+ />
146
+ }
147
+ </div>
148
+ <div>
149
+ <div style={{ marginTop: 20 }} className='natural-person-flag' >
150
+ {
151
+ props.isNaturalPerson === true &&
152
+ <Form.Item colon={false}>
153
+ {getFieldDecorator('naturalPersonFlag', {
154
+ })(
155
+ <NaturalPersonFlag readOnly={isReadOnly('naturalPersonFlag')} />
156
+ )}
157
+ </Form.Item>
158
+ }
159
+ </div>
160
+ <Form className="digtal-stakeholder-form" >
161
+ <Row gutter={[16, 0]}>
162
+ <Col span={24} >
163
+ <Form.Item label='名称' colon={false}>
164
+ {getFieldDecorator('buyerName', {
165
+ rules: getRules('buyerName', RULES.companyName('购买方名称')),
166
+ })(
167
+ <BuyerNameInput
168
+ myform={form}
169
+ fieldName='buyerName'
170
+ readOnly={isReadOnly('buyerName')}
171
+ placeholder="请输入名称"
172
+ autoComplete="off"
173
+ suffix={
174
+ isShowImportButton === true &&
175
+ <Button
176
+ type='link'
177
+ style={{ padding: 0, width: 20, height: '100%' }}
178
+ icon={<Icon component={PlusSvg} />}
179
+ onClick={() => { onClickImportButton && onClickImportButton(controller) }}
180
+ />
181
+ }
182
+ />
183
+ )}
184
+ </Form.Item>
185
+ </Col>
186
+
187
+ <Col span={24} >
188
+ <Form.Item label='统一社会信用代码/纳税人识别号' colon={false}>
189
+ {getFieldDecorator('buyerTaxId', {
190
+ rules: getRules('buyerTaxId', [{ required: !isVatNormal, message: '购买方纳税人识别号必填' }, ...RULES.taxId('购买方纳税人识别号')])
191
+ })(
192
+ <BuyerNameInput
193
+ myform={form}
194
+ fieldName='buyerTaxId'
195
+ readOnly={isReadOnly('buyerTaxId')}
196
+ placeholder="请输入统一社会信用代码/纳税人识别号"
197
+ autoComplete="off"
198
+ />
199
+ )}
200
+ </Form.Item>
201
+ </Col>
202
+
203
+ <Col span={10+leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
204
+ <Form.Item label='购买方地址' colon={false}>
205
+ {getFieldDecorator('buyerAddress', {
206
+ rules: getRules('buyerAddress', [{ max: 100, message: '购买方地址内容超长' }])
207
+ })(<MyInput readOnly={isReadOnly('buyerAddress')} placeholder="请输入购买方地址" autoComplete="off" />)}
208
+ </Form.Item>
209
+ </Col>
210
+
211
+ <Col span={10+leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
212
+ <Form.Item label='电话' colon={false} className='telephone'>
213
+ {getFieldDecorator('buyerPhone', {
214
+ rules: getRules('buyerPhone', RULES.buyerTelPhone('购买方电话'))
215
+ })(<MyInput readOnly={isReadOnly('buyerPhone')} placeholder="请输入电话" autoComplete="off" />)}
216
+ </Form.Item>
217
+ </Col>
218
+ {(props.leqi) &&
219
+ <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
220
+ <Form.Item colon={false}>
221
+ {getFieldDecorator('buyerAddressPhoneFlag', {
222
+ valuePropName: 'checked',
223
+ })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('buyerAddressPhoneFlag')} style={{whiteSpace:'nowrap'}}>是否展示</Checkbox>)}
224
+ </Form.Item>
225
+ </Col>
226
+ }
227
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
228
+ <Form.Item label='购买方开户银行' colon={false}>
229
+ {getFieldDecorator('buyerBank', {
230
+ rules: getRules('buyerBank', RULES.bankName('购买方开户银行'))
231
+ })(<MyInput readOnly={isReadOnly('buyerBank')} placeholder="请输入购买方开户银行" autoComplete="off" />)}
232
+ </Form.Item>
233
+ </Col>
234
+
235
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
236
+ <Form.Item label='银行账号' colon={false}>
237
+ {getFieldDecorator('buyerAccount', {
238
+ rules: getRules('buyerAccount', RULES.bankAccount('购买方银行账号'))
239
+ })(<MyInput readOnly={isReadOnly('buyerAccount')} placeholder="请输入银行账号" autoComplete="off" />)}
240
+ </Form.Item>
241
+ </Col>
242
+ {(props.leqi) &&
243
+ <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
244
+ <Form.Item colon={false}>
245
+ {getFieldDecorator('buyerBankAccountFlag', {
246
+ valuePropName: 'checked',
247
+ })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('buyerBankAccountFlag')} style={{whiteSpace:'nowrap'}}>是否展示</Checkbox>)}
248
+ </Form.Item>
249
+ </Col>
250
+ }
251
+ </Row>
252
+ </Form>
253
+ </div>
254
+ <div>
255
+ {'销售方信息'.split('').map(e => <span>{e}</span>)}
256
+ {
257
+ !readOnly &&
258
+ <Icon
259
+ className="digtal-stakeholder-expand-button"
260
+ component={isExpand ? ArrowUpSvg : ArrowDownSvg}
261
+ onClick={onExpand}
262
+ />
263
+ }
264
+ </div>
265
+ <div>
266
+ {
267
+ !readOnly && props.lineCredit &&
268
+ <div style={{ marginTop: 20 }} >
269
+ <Tooltip trigger="click" title={props.lineCredit} >
270
+ <Button type="link" style={{ padding: `0px 8px` }} >查看当前可用授信额度</Button>
271
+ </Tooltip>
272
+ </div>
273
+ }
274
+ <Form className="digtal-stakeholder-form" >
275
+ <Row gutter={[16, 0]}>
276
+ <Col span={24} >
277
+ <Form.Item label='名称' colon={false}>
278
+ {getFieldDecorator('supplierName', {
279
+ rules: getRules('supplierName', RULES.companyName('销售方名称')),
280
+ getValueFromEvent: formatCompanyName
281
+ })(<MyInput readOnly={isReadOnly('supplierName')} placeholder="请输入名称" autoComplete="off" />)}
282
+ </Form.Item>
283
+ </Col>
284
+
285
+ <Col span={24} >
286
+ <Form.Item label='统一社会信用代码/纳税人识别号' colon={false}>
287
+ {getFieldDecorator('supplierTaxId', {
288
+ rules: getRules('supplierTaxId', [{ required: true, message: '销售方纳税人识别号必填' }, ...RULES.taxId('销售方纳税人识别号')])
289
+ })(<MyInput readOnly={isReadOnly('supplierTaxId')} placeholder="请输入统一社会信用代码/纳税人识别号" autoComplete="off" />)}
290
+ </Form.Item>
291
+ </Col>
292
+
293
+ <Col span={10+leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
294
+ <Form.Item label='销售方地址' colon={false}>
295
+ {getFieldDecorator('sellerAddress', {
296
+ rules: getRules('sellerAddress', [{ max: 300, message: '销售方地址内容超长' }])
297
+ })(<MyInput readOnly={isReadOnly('sellerAddress')} placeholder="请输入销售方地址" autoComplete="off" />)}
298
+ </Form.Item>
299
+ </Col>
300
+
301
+ <Col span={10+leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
302
+ <Form.Item label='电话' colon={false} className='telephone' >
303
+ {getFieldDecorator('sellerPhone', {
304
+ rules: getRules('sellerPhone', RULES.sellerTelPhone('销售方电话'))
305
+ })(<MyInput readOnly={isReadOnly('sellerPhone')} placeholder="请输入电话" autoComplete="off" />)}
306
+ </Form.Item>
307
+ </Col>
308
+ {(props.leqi) &&
309
+ <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
310
+ <Form.Item colon={false}>
311
+ {getFieldDecorator('sellerAddressPhoneFlag', {
312
+ valuePropName: 'checked',
313
+ })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('sellerAddressPhoneFlag')} style={{whiteSpace:'nowrap'}}>是否展示</Checkbox>)}
314
+ </Form.Item>
315
+ </Col>
316
+ }
317
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
318
+ <Form.Item label='销售方开户银行' colon={false}>
319
+ {getFieldDecorator('sellerBank', {
320
+ rules: getRules('sellerBank', RULES.bankName('销售方开户银行'))
321
+ })(<MyInput readOnly={isReadOnly('sellerBank')} placeholder="请输入销售方开户银行" autoComplete="off" />)}
322
+ </Form.Item>
323
+ </Col>
324
+
325
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
326
+ <Form.Item label='银行账号' colon={false}>
327
+ {getFieldDecorator('sellerAccount', {
328
+ rules: getRules('sellerAccount', RULES.bankAccount('销售方银行账号'))
329
+ })(<MyInput readOnly={isReadOnly('sellerAccount')} placeholder="请输入银行账号" autoComplete="off" />)}
330
+ </Form.Item>
331
+ </Col>
332
+ {(props.leqi ) &&
333
+ <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
334
+ <Form.Item colon={false}>
335
+ {getFieldDecorator('sellerBankAccountFlag', {
336
+ valuePropName: 'checked',
337
+ })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('sellerBankAccountFlag')} style={{whiteSpace:'nowrap'}}>是否展示</Checkbox>)}
338
+ </Form.Item>
339
+ </Col>
340
+ }
341
+ </Row>
342
+ </Form>
343
+ </div>
344
+ </div>
345
+ )
346
+ })
347
+
348
+ function NaturalPersonFlag(props: {
349
+ // NATURAL("自然人"), COMPANY("非自然人");
350
+ value?: 'COMPANY' | 'NATURAL',
351
+ onChange?: (e: 'COMPANY' | 'NATURAL') => void
352
+ readOnly?: boolean;
353
+ }) {
354
+
355
+ const [value, setValue] = React.useState(props.value || 'COMPANY');
356
+
357
+ const onChange = React.useCallback((e: CheckboxChangeEvent) => {
358
+ if (props.readOnly) return;
359
+ setValue(e.target.checked ? 'NATURAL' : 'COMPANY');
360
+ props.onChange && props.onChange(e.target.checked ? 'NATURAL' : 'COMPANY');
361
+ }, [props.onChange, props.readOnly])
362
+
363
+ React.useEffect(() => {
364
+ setValue(props.value || 'COMPANY')
365
+ }, [props.value])
366
+
367
+ return (
368
+ <Checkbox
369
+ disabled={props.readOnly}
370
+ checked={value === 'NATURAL'}
371
+ onChange={onChange}
372
+ >
373
+ 是否开票给自然人
374
+ </Checkbox>
375
+ )
376
+ }
377
+
378
+ function BuyerNameInput(props: InputProps & { fieldName: string; myform: WrappedFormUtils<any> }) {
379
+
380
+ const { fieldName, myform: form } = props;
381
+
382
+ const controller = Invoice.useInvoiceController();
383
+
384
+ const rootElement = controller.useMemo(s => s.rootElement, []);
385
+
386
+ const autoComplete = controller.useMemo(s => s.autoComplete, [])
387
+
388
+ const [options, setOptions] = React.useState<any[]>([])
389
+
390
+ const onChangeAutoComplete = React.useCallback(value => {
391
+ const record = options.filter(e => e[fieldName] === value)[0] as any;
392
+ if (!record || !form) return;
393
+
394
+ form.setFieldsValue(record);
395
+ setOptions([])
396
+ }, [options, fieldName, form])
397
+
398
+ const onSearch = React.useCallback(async (searchText: string) => {
399
+ await Discontinue.start();
400
+ try {
401
+ if (fieldName === 'buyerName') {
402
+ if (autoComplete.onBuyerNameSearch) {
403
+ setOptions(await autoComplete.onBuyerNameSearch(searchText));
404
+ }
405
+ } else if (fieldName === 'buyerTaxId') {
406
+ if (autoComplete.onBuyerTaxIdSearch) {
407
+ setOptions(await autoComplete.onBuyerTaxIdSearch(searchText));
408
+ }
409
+ }
410
+
411
+ } catch (error) {
412
+ setOptions([]);
413
+ throw error;
414
+ }
415
+ }, [autoComplete.onBuyerNameSearch, fieldName])
416
+
417
+ if (props.readOnly) return <span className='digtal-stakeholder-form-text'>{props.value}</span>;
418
+
419
+ return (
420
+ <AutoComplete
421
+ onSearch={onSearch}
422
+ options={options.map(e => ({ value: e[fieldName] }))}
423
+ onChange={onChangeAutoComplete}
424
+ value={props.value}
425
+ getPopupContainer={() => rootElement || document.body}
426
+ style={{ width: '100%' }}
427
+ >
428
+ <Input {...props} style={{ width: '100%', ...props.style }} />
429
+ </AutoComplete>
430
+ )
431
+ }
432
+
433
+ class MyInput extends React.Component<InputProps> {
434
+ render() {
435
+ const props = this.props;
436
+ if (props.readOnly) {
437
+ return <span className='digtal-stakeholder-form-text'>{props.value}</span>
438
+ } else {
439
+ return <Input {...props} />
440
+ }
441
+ }
442
+ }
443
+
444
+ class Discontinue {
445
+
446
+ private static timer: any;
447
+
448
+ static start = (interval = 200) => new Promise<void>(resolve => {
449
+ clearTimeout(Discontinue.timer);
450
+ Discontinue.timer = setTimeout(resolve, interval);
451
+ })
452
+ }
453
+