kts-component-invoice-operate 3.2.243 → 3.2.245

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 (302) 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/Invoice-digtal/_test/pay/index.d.ts +4 -0
  11. package/dist/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IGood/index.d.ts +1 -0
  12. package/dist/Invoice/InvoiceController/InvoiceControllerState/PayListState/IColumnsReplenish/index.d.ts +6 -0
  13. package/dist/Invoice/InvoiceController/InvoiceControllerState/PayListState/IGood/index.d.ts +12 -0
  14. package/dist/Invoice/InvoiceController/InvoiceControllerState/PayListState/ImportGoods/index.d.ts +21 -0
  15. package/dist/Invoice/InvoiceController/InvoiceControllerState/PayListState/index.d.ts +31 -0
  16. package/dist/Invoice/InvoiceController/InvoiceControllerState/index.d.ts +2 -0
  17. package/dist/Invoice/InvoiceController/fns/addPay.d.ts +6 -0
  18. package/dist/Invoice/InvoiceController/fns/delPay.d.ts +6 -0
  19. package/dist/Invoice/InvoiceController/fns/saveEditPay.d.ts +6 -0
  20. package/dist/Invoice/InvoiceController/fns/setEditPay.d.ts +6 -0
  21. package/dist/Invoice/InvoiceController/fns/setPay.d.ts +6 -0
  22. package/dist/Invoice/InvoiceController/index.d.ts +6 -0
  23. package/dist/Invoice/index.d.ts +2 -0
  24. package/dist/Invoice/ui/digtal/PayList/hook/useColumns/index.d.ts +3 -0
  25. package/dist/Invoice/ui/digtal/PayList/hook/useColumns/ui/TitleText/index.d.ts +8 -0
  26. package/dist/Invoice/ui/digtal/PayList/hook/useOnRow/index.d.ts +8 -0
  27. package/dist/Invoice/ui/digtal/PayList/hook/useRowSelection/index.d.ts +8 -0
  28. package/dist/Invoice/ui/digtal/PayList/hook/useWindowClick/index.d.ts +5 -0
  29. package/dist/Invoice/ui/digtal/PayList/index.d.ts +18 -0
  30. package/dist/Invoice/ui/digtal/PayList/ui/AddRowButton/index.d.ts +3 -0
  31. package/dist/Invoice/ui/digtal/PayList/ui/BulkMenu/hooks/useDelRowButton/index.d.ts +6 -0
  32. package/dist/Invoice/ui/digtal/PayList/ui/BulkMenu/hooks/useEmptyRefill/index.d.ts +6 -0
  33. package/dist/Invoice/ui/digtal/PayList/ui/TableRow/index.d.ts +3 -0
  34. package/dist/Invoice/ui/digtal/PayList/ui/TableVirtual/index.d.ts +4 -0
  35. package/dist/Invoice/ui/digtal/StakeFarmerholder/index.d.ts +2 -0
  36. package/dist/index.esm.js +8765 -5735
  37. package/dist/index.js +8764 -5734
  38. package/docs/index.md +5 -5
  39. package/docs-dist/404.html +33 -33
  40. package/docs-dist/index.html +33 -33
  41. package/docs-dist/static/arrowDown.a1cbf0d8.svg +2 -2
  42. package/docs-dist/static/arrowUp.4c482054.svg +2 -2
  43. package/docs-dist/static/fork.5431267d.svg +11 -11
  44. package/docs-dist/static/plus.44013ce3.svg +11 -11
  45. package/docs-dist/static/plus.4fd1af30.svg +11 -11
  46. package/docs-dist/umi.css +18 -18
  47. package/index.html +12 -12
  48. package/package.json +62 -62
  49. package/src/Invoice/Invoice-digtal/_test/architecture/index.tsx +21 -21
  50. package/src/Invoice/Invoice-digtal/_test/disabled/index.tsx +40 -40
  51. package/src/Invoice/Invoice-digtal/_test/easiest/index.tsx +214 -182
  52. package/src/Invoice/Invoice-digtal/_test/freight/index.tsx +14580 -14574
  53. package/src/Invoice/Invoice-digtal/_test/header/index.tsx +84 -84
  54. package/src/Invoice/Invoice-digtal/_test/importGoods/index.tsx +868 -868
  55. package/src/Invoice/Invoice-digtal/_test/importStakeholder/index.tsx +18 -18
  56. package/src/Invoice/Invoice-digtal/_test/lineCredit/index.tsx +19 -19
  57. package/src/Invoice/Invoice-digtal/_test/pay/index.tsx +14637 -0
  58. package/src/Invoice/Invoice-digtal/_test/prefab/index.tsx +150 -150
  59. package/src/Invoice/Invoice-digtal/_test/readOnly/index.tsx +55 -55
  60. package/src/Invoice/Invoice-digtal/_test/realEstateInfo/index.tsx +83 -36
  61. package/src/Invoice/Invoice-digtal/_test/stakeholder/index.tsx +12 -12
  62. package/src/Invoice/Invoice-digtal/_test/typeSelection/index.tsx +29 -29
  63. package/src/Invoice/Invoice-digtal/index.md +44 -43
  64. package/src/Invoice/InvoiceController/InvoiceControllerForm/index.ts +116 -105
  65. package/src/Invoice/InvoiceController/InvoiceControllerState/AutoComplete/index.ts +26 -26
  66. package/src/Invoice/InvoiceController/InvoiceControllerState/BuyerState/index.tsx +88 -88
  67. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/IColumnsReplenish/index.ts +10 -10
  68. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/IGood/index.ts +33 -33
  69. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/ImportGoods/index.ts +81 -81
  70. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/index.ts +39 -39
  71. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/Drag/index.ts +15 -15
  72. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/EndowCode/index.tsx +104 -104
  73. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IColumnsReplenish/index.ts +10 -10
  74. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IGood/index.ts +91 -89
  75. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ImportGoods/index.ts +84 -84
  76. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/LineAttributeType/index.ts +7 -7
  77. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ProductComparison/index.ts +9 -9
  78. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/index.ts +134 -134
  79. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/IColumnsReplenish/index.ts +10 -0
  80. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/IGood/index.ts +35 -0
  81. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/ImportGoods/index.ts +81 -0
  82. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/index.ts +40 -0
  83. package/src/Invoice/InvoiceController/InvoiceControllerState/Stakeholder/index.ts +13 -13
  84. package/src/Invoice/InvoiceController/InvoiceControllerState/index.ts +76 -73
  85. package/src/Invoice/InvoiceController/fns/addFreight.ts +11 -11
  86. package/src/Invoice/InvoiceController/fns/addGood.ts +11 -11
  87. package/src/Invoice/InvoiceController/fns/addGoodDiscount.ts +126 -126
  88. package/src/Invoice/InvoiceController/fns/addGoodDiscountV2.ts +86 -86
  89. package/src/Invoice/InvoiceController/fns/addPay.ts +11 -0
  90. package/src/Invoice/InvoiceController/fns/delFreight.ts +38 -38
  91. package/src/Invoice/InvoiceController/fns/delGood.ts +41 -41
  92. package/src/Invoice/InvoiceController/fns/delPay.ts +38 -0
  93. package/src/Invoice/InvoiceController/fns/getGoodsSearch.ts +26 -26
  94. package/src/Invoice/InvoiceController/fns/importGoodsDrawer.ts +79 -79
  95. package/src/Invoice/InvoiceController/fns/itemBlur.ts +40 -40
  96. package/src/Invoice/InvoiceController/fns/mergeDetails.ts +201 -201
  97. package/src/Invoice/InvoiceController/fns/mergeDiscount.ts +35 -35
  98. package/src/Invoice/InvoiceController/fns/saveEditFreight.ts +24 -24
  99. package/src/Invoice/InvoiceController/fns/saveEditGood.ts +24 -24
  100. package/src/Invoice/InvoiceController/fns/saveEditPay.ts +23 -0
  101. package/src/Invoice/InvoiceController/fns/setEditFreight.ts +16 -16
  102. package/src/Invoice/InvoiceController/fns/setEditGood.ts +16 -16
  103. package/src/Invoice/InvoiceController/fns/setEditPay.ts +16 -0
  104. package/src/Invoice/InvoiceController/fns/setFreight.ts +10 -10
  105. package/src/Invoice/InvoiceController/fns/setGoods.ts +10 -10
  106. package/src/Invoice/InvoiceController/fns/setPay.ts +11 -0
  107. package/src/Invoice/InvoiceController/fns/updateInvoiceNo.ts +8 -8
  108. package/src/Invoice/InvoiceController/index.ts +127 -106
  109. package/src/Invoice/_test/buyerNameSearch/index.tsx +42 -42
  110. package/src/Invoice/_test/children/index.tsx +214 -214
  111. package/src/Invoice/_test/deduction/index.tsx +957 -957
  112. package/src/Invoice/_test/draft/index.tsx +40 -40
  113. package/src/Invoice/_test/easiest/index.tsx +5 -5
  114. package/src/Invoice/_test/endowCode/index.tsx +1158 -1158
  115. package/src/Invoice/_test/goodsMenuExpand/index.tsx +32 -32
  116. package/src/Invoice/_test/importBuyer/index.tsx +74 -74
  117. package/src/Invoice/_test/importGoods/index.tsx +1197 -1197
  118. package/src/Invoice/_test/invoiceType/index.tsx +59 -59
  119. package/src/Invoice/_test/isInvoiceNo/index.tsx +12 -12
  120. package/src/Invoice/_test/replaceHead/index.tsx +22 -22
  121. package/src/Invoice/_test/retrieveData/index.tsx +22 -22
  122. package/src/Invoice/_test/seller/index.tsx +28 -28
  123. package/src/Invoice/_test/setDataSource/index.tsx +73 -73
  124. package/src/Invoice/_test/unit/index.tsx +19 -19
  125. package/src/Invoice/index.less +31 -31
  126. package/src/Invoice/index.md +56 -56
  127. package/src/Invoice/index.tsx +200 -197
  128. package/src/Invoice/tools/calculate/index.ts +144 -144
  129. package/src/Invoice/tools/coolingFn/index.ts +17 -17
  130. package/src/Invoice/tools/evaluate/index.ts +7 -7
  131. package/src/Invoice/tools/idGenerator/index.ts +2 -2
  132. package/src/Invoice/tools/itemName/index.ts +55 -55
  133. package/src/Invoice/tools/lazyFn/index.ts +19 -19
  134. package/src/Invoice/tools/mounting/index.ts +13 -13
  135. package/src/Invoice/tools/strringFn/index.ts +40 -40
  136. package/src/Invoice/tools/useToGenerateId/index.ts +12 -10
  137. package/src/Invoice/tools/utils/index.ts +1 -1
  138. package/src/Invoice/tools/utils/money/index.ts +20 -20
  139. package/src/Invoice/ui/default/AddComparisonDrawer/index.tsx +149 -149
  140. package/src/Invoice/ui/default/Buyer/index.less +219 -219
  141. package/src/Invoice/ui/default/Buyer/index.tsx +114 -114
  142. package/src/Invoice/ui/default/Buyer/ui/BuyerNameInput/index.tsx +166 -166
  143. package/src/Invoice/ui/default/Buyer/ui/ImportBuyerButton/index.tsx +21 -21
  144. package/src/Invoice/ui/default/EndowCodeDrawer/index.less +8 -8
  145. package/src/Invoice/ui/default/EndowCodeDrawer/index.tsx +612 -612
  146. package/src/Invoice/ui/default/GoodsList/hook/useColumns/autoFillFn/index.ts +647 -647
  147. package/src/Invoice/ui/default/GoodsList/hook/useColumns/index.tsx +719 -719
  148. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
  149. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
  150. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Expand/index.tsx +57 -57
  151. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.less +18 -18
  152. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.tsx +49 -49
  153. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +17 -17
  154. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +91 -91
  155. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  156. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  157. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +118 -118
  158. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/dist/index.js +32 -32
  159. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
  160. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +25 -25
  161. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
  162. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +99 -99
  163. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  164. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  165. package/src/Invoice/ui/default/GoodsList/hook/useDeduction/index.tsx +24 -24
  166. package/src/Invoice/ui/default/GoodsList/hook/useOnRow/index.tsx +52 -52
  167. package/src/Invoice/ui/default/GoodsList/hook/useRowSelection/index.tsx +120 -120
  168. package/src/Invoice/ui/default/GoodsList/hook/useWindowClick/index.tsx +23 -23
  169. package/src/Invoice/ui/default/GoodsList/index.less +185 -185
  170. package/src/Invoice/ui/default/GoodsList/index.tsx +207 -207
  171. package/src/Invoice/ui/default/GoodsList/ui/AddRowButton/index.tsx +72 -72
  172. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.less +21 -21
  173. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +244 -244
  174. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  175. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +69 -69
  176. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +65 -65
  177. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDetails/index.tsx +91 -91
  178. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDiscount/index.tsx +36 -36
  179. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesDiscount/index.tsx +109 -109
  180. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesGifts/index.tsx +94 -94
  181. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/index.tsx +37 -37
  182. package/src/Invoice/ui/default/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
  183. package/src/Invoice/ui/default/GoodsList/ui/Search/index.less +10 -10
  184. package/src/Invoice/ui/default/GoodsList/ui/Search/index.tsx +52 -52
  185. package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.less +18 -18
  186. package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.tsx +114 -114
  187. package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.less +40 -40
  188. package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.tsx +71 -71
  189. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.less +38 -38
  190. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.tsx +130 -130
  191. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.less +44 -44
  192. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.tsx +96 -96
  193. package/src/Invoice/ui/default/GoodsList/ui/TaxIncludedSwitch/index.tsx +31 -31
  194. package/src/Invoice/ui/default/ImportBuyerDrawer/index.tsx +75 -75
  195. package/src/Invoice/ui/default/ImportGoodsDrawer/index.tsx +201 -201
  196. package/src/Invoice/ui/default/InvoiceHeader/index.less +68 -68
  197. package/src/Invoice/ui/default/InvoiceHeader/index.tsx +246 -246
  198. package/src/Invoice/ui/default/Seller/index.less +113 -113
  199. package/src/Invoice/ui/default/Seller/index.tsx +98 -98
  200. package/src/Invoice/ui/default/Sign/index.less +14 -14
  201. package/src/Invoice/ui/default/Sign/index.tsx +71 -71
  202. package/src/Invoice/ui/digtal/Architecture/index.less +18 -18
  203. package/src/Invoice/ui/digtal/Architecture/index.tsx +177 -177
  204. package/src/Invoice/ui/digtal/FreightList/hook/useColumns/dist/index.js +616 -616
  205. package/src/Invoice/ui/digtal/FreightList/hook/useColumns/index.tsx +246 -246
  206. package/src/Invoice/ui/digtal/FreightList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  207. package/src/Invoice/ui/digtal/FreightList/hook/useOnRow/index.tsx +37 -37
  208. package/src/Invoice/ui/digtal/FreightList/hook/useRowSelection/index.tsx +119 -119
  209. package/src/Invoice/ui/digtal/FreightList/hook/useWindowClick/index.tsx +23 -23
  210. package/src/Invoice/ui/digtal/FreightList/index.less +72 -72
  211. package/src/Invoice/ui/digtal/FreightList/index.tsx +129 -129
  212. package/src/Invoice/ui/digtal/FreightList/ui/AddRowButton/index.tsx +74 -74
  213. package/src/Invoice/ui/digtal/FreightList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
  214. package/src/Invoice/ui/digtal/FreightList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +36 -36
  215. package/src/Invoice/ui/digtal/FreightList/ui/TableRow/index.less +28 -28
  216. package/src/Invoice/ui/digtal/FreightList/ui/TableRow/index.tsx +20 -20
  217. package/src/Invoice/ui/digtal/FreightList/ui/TableVirtual/index.less +38 -38
  218. package/src/Invoice/ui/digtal/FreightList/ui/TableVirtual/index.tsx +108 -108
  219. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/autoFillFn/index.ts +683 -683
  220. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/dist/index.js +616 -616
  221. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/index.tsx +724 -724
  222. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/svg/plus.svg +11 -11
  223. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
  224. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
  225. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +9 -9
  226. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +87 -87
  227. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  228. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  229. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +76 -76
  230. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
  231. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +34 -34
  232. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
  233. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +98 -98
  234. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  235. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  236. package/src/Invoice/ui/digtal/GoodsList/hook/useOnRow/index.tsx +51 -51
  237. package/src/Invoice/ui/digtal/GoodsList/hook/useRowSelection/index.tsx +121 -121
  238. package/src/Invoice/ui/digtal/GoodsList/hook/useWindowClick/index.tsx +23 -23
  239. package/src/Invoice/ui/digtal/GoodsList/index.less +56 -56
  240. package/src/Invoice/ui/digtal/GoodsList/index.tsx +181 -181
  241. package/src/Invoice/ui/digtal/GoodsList/ui/AddRowButton/index.tsx +87 -87
  242. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +340 -340
  243. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/svg/add.svg +11 -11
  244. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  245. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
  246. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +37 -37
  247. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +82 -82
  248. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useReselectInvoiceType/index.tsx +57 -57
  249. package/src/Invoice/ui/digtal/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
  250. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.less +11 -11
  251. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.tsx +60 -60
  252. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.less +53 -53
  253. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.tsx +98 -98
  254. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/svg/fork.svg +11 -11
  255. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.less +28 -28
  256. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.tsx +52 -52
  257. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.less +38 -38
  258. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.tsx +113 -113
  259. package/src/Invoice/ui/digtal/GoodsList/ui/TaxIncludedSwitch/index.tsx +34 -34
  260. package/src/Invoice/ui/digtal/InvoiceHeader/index.less +57 -57
  261. package/src/Invoice/ui/digtal/InvoiceHeader/index.tsx +77 -77
  262. package/src/Invoice/ui/digtal/PayList/hook/useColumns/dist/index.js +616 -0
  263. package/src/Invoice/ui/digtal/PayList/hook/useColumns/index.tsx +168 -0
  264. package/src/Invoice/ui/digtal/PayList/hook/useColumns/ui/TitleText/index.tsx +20 -0
  265. package/src/Invoice/ui/digtal/PayList/hook/useOnRow/index.tsx +37 -0
  266. package/src/Invoice/ui/digtal/PayList/hook/useRowSelection/index.tsx +120 -0
  267. package/src/Invoice/ui/digtal/PayList/hook/useWindowClick/index.tsx +19 -0
  268. package/src/Invoice/ui/digtal/PayList/index.less +73 -0
  269. package/src/Invoice/ui/digtal/PayList/index.tsx +132 -0
  270. package/src/Invoice/ui/digtal/PayList/ui/AddRowButton/index.tsx +75 -0
  271. package/src/Invoice/ui/digtal/PayList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -0
  272. package/src/Invoice/ui/digtal/PayList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +37 -0
  273. package/src/Invoice/ui/digtal/PayList/ui/TableRow/index.less +29 -0
  274. package/src/Invoice/ui/digtal/PayList/ui/TableRow/index.tsx +21 -0
  275. package/src/Invoice/ui/digtal/PayList/ui/TableVirtual/index.less +39 -0
  276. package/src/Invoice/ui/digtal/PayList/ui/TableVirtual/index.tsx +109 -0
  277. package/src/Invoice/ui/digtal/RealEstateInfo/index.less +21 -21
  278. package/src/Invoice/ui/digtal/RealEstateInfo/index.tsx +451 -242
  279. package/src/Invoice/ui/digtal/Sign/index.less +48 -48
  280. package/src/Invoice/ui/digtal/Sign/index.tsx +99 -99
  281. package/src/Invoice/ui/digtal/StakeFarmerholder/index.less +99 -99
  282. package/src/Invoice/ui/digtal/StakeFarmerholder/index.tsx +1102 -491
  283. package/src/Invoice/ui/digtal/StakeFarmerholder/svg/arrowDown.svg +2 -2
  284. package/src/Invoice/ui/digtal/StakeFarmerholder/svg/arrowUp.svg +2 -2
  285. package/src/Invoice/ui/digtal/StakeFarmerholder/svg/plus.svg +11 -11
  286. package/src/Invoice/ui/digtal/Stakeholder/index.less +99 -99
  287. package/src/Invoice/ui/digtal/Stakeholder/index.tsx +453 -453
  288. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowDown.svg +2 -2
  289. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowUp.svg +2 -2
  290. package/src/Invoice/ui/digtal/Stakeholder/svg/plus.svg +11 -11
  291. package/src/InvoiceTypeModal/_test/easiest/index.tsx +31 -31
  292. package/src/InvoiceTypeModal/dist/index.js +92 -92
  293. package/src/InvoiceTypeModal/index.less +7 -7
  294. package/src/InvoiceTypeModal/index.md +5 -5
  295. package/src/InvoiceTypeModal/index.tsx +161 -161
  296. package/src/TaxClassificationCodeModal/_test/easiest/index.tsx +184 -184
  297. package/src/TaxClassificationCodeModal/index.less +17 -17
  298. package/src/TaxClassificationCodeModal/index.md +6 -6
  299. package/src/TaxClassificationCodeModal/index.tsx +152 -152
  300. package/src/index.ts +13 -13
  301. package/tsconfig.json +31 -31
  302. 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
+