kts-component-invoice-operate 3.2.244 → 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 (277) 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/digtal/StakeFarmerholder/index.d.ts +2 -0
  11. package/dist/index.esm.js +4 -2
  12. package/dist/index.js +4 -2
  13. package/docs/index.md +5 -5
  14. package/docs-dist/404.html +33 -33
  15. package/docs-dist/index.html +33 -33
  16. package/docs-dist/static/arrowDown.a1cbf0d8.svg +2 -2
  17. package/docs-dist/static/arrowUp.4c482054.svg +2 -2
  18. package/docs-dist/static/fork.5431267d.svg +11 -11
  19. package/docs-dist/static/plus.44013ce3.svg +11 -11
  20. package/docs-dist/static/plus.4fd1af30.svg +11 -11
  21. package/docs-dist/umi.css +18 -18
  22. package/index.html +12 -12
  23. package/package.json +62 -62
  24. package/src/Invoice/Invoice-digtal/_test/architecture/index.tsx +21 -21
  25. package/src/Invoice/Invoice-digtal/_test/disabled/index.tsx +40 -40
  26. package/src/Invoice/Invoice-digtal/_test/easiest/index.tsx +214 -214
  27. package/src/Invoice/Invoice-digtal/_test/freight/index.tsx +14580 -14580
  28. package/src/Invoice/Invoice-digtal/_test/header/index.tsx +84 -84
  29. package/src/Invoice/Invoice-digtal/_test/importGoods/index.tsx +868 -868
  30. package/src/Invoice/Invoice-digtal/_test/importStakeholder/index.tsx +18 -18
  31. package/src/Invoice/Invoice-digtal/_test/lineCredit/index.tsx +19 -19
  32. package/src/Invoice/Invoice-digtal/_test/pay/index.tsx +14636 -14636
  33. package/src/Invoice/Invoice-digtal/_test/prefab/index.tsx +150 -150
  34. package/src/Invoice/Invoice-digtal/_test/readOnly/index.tsx +55 -55
  35. package/src/Invoice/Invoice-digtal/_test/realEstateInfo/index.tsx +83 -83
  36. package/src/Invoice/Invoice-digtal/_test/stakeholder/index.tsx +12 -12
  37. package/src/Invoice/Invoice-digtal/_test/typeSelection/index.tsx +29 -29
  38. package/src/Invoice/Invoice-digtal/index.md +44 -44
  39. package/src/Invoice/InvoiceController/InvoiceControllerForm/index.ts +116 -116
  40. package/src/Invoice/InvoiceController/InvoiceControllerState/AutoComplete/index.ts +26 -26
  41. package/src/Invoice/InvoiceController/InvoiceControllerState/BuyerState/index.tsx +88 -88
  42. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/IColumnsReplenish/index.ts +10 -10
  43. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/IGood/index.ts +33 -33
  44. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/ImportGoods/index.ts +81 -81
  45. package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/index.ts +39 -39
  46. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/Drag/index.ts +15 -15
  47. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/EndowCode/index.tsx +104 -104
  48. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IColumnsReplenish/index.ts +10 -10
  49. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IGood/index.ts +91 -90
  50. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ImportGoods/index.ts +84 -84
  51. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/LineAttributeType/index.ts +7 -7
  52. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ProductComparison/index.ts +9 -9
  53. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/index.ts +134 -134
  54. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/IColumnsReplenish/index.ts +10 -10
  55. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/IGood/index.ts +35 -35
  56. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/ImportGoods/index.ts +81 -81
  57. package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/index.ts +39 -39
  58. package/src/Invoice/InvoiceController/InvoiceControllerState/Stakeholder/index.ts +13 -13
  59. package/src/Invoice/InvoiceController/InvoiceControllerState/index.ts +76 -76
  60. package/src/Invoice/InvoiceController/fns/addFreight.ts +11 -11
  61. package/src/Invoice/InvoiceController/fns/addGood.ts +11 -11
  62. package/src/Invoice/InvoiceController/fns/addGoodDiscount.ts +126 -126
  63. package/src/Invoice/InvoiceController/fns/addGoodDiscountV2.ts +86 -86
  64. package/src/Invoice/InvoiceController/fns/addPay.ts +11 -11
  65. package/src/Invoice/InvoiceController/fns/delFreight.ts +38 -38
  66. package/src/Invoice/InvoiceController/fns/delGood.ts +41 -41
  67. package/src/Invoice/InvoiceController/fns/delPay.ts +38 -38
  68. package/src/Invoice/InvoiceController/fns/getGoodsSearch.ts +26 -26
  69. package/src/Invoice/InvoiceController/fns/importGoodsDrawer.ts +79 -79
  70. package/src/Invoice/InvoiceController/fns/itemBlur.ts +40 -40
  71. package/src/Invoice/InvoiceController/fns/mergeDetails.ts +201 -201
  72. package/src/Invoice/InvoiceController/fns/mergeDiscount.ts +35 -35
  73. package/src/Invoice/InvoiceController/fns/saveEditFreight.ts +24 -24
  74. package/src/Invoice/InvoiceController/fns/saveEditGood.ts +24 -24
  75. package/src/Invoice/InvoiceController/fns/saveEditPay.ts +23 -23
  76. package/src/Invoice/InvoiceController/fns/setEditFreight.ts +16 -16
  77. package/src/Invoice/InvoiceController/fns/setEditGood.ts +16 -16
  78. package/src/Invoice/InvoiceController/fns/setEditPay.ts +16 -16
  79. package/src/Invoice/InvoiceController/fns/setFreight.ts +10 -10
  80. package/src/Invoice/InvoiceController/fns/setGoods.ts +10 -10
  81. package/src/Invoice/InvoiceController/fns/setPay.ts +10 -10
  82. package/src/Invoice/InvoiceController/fns/updateInvoiceNo.ts +8 -8
  83. package/src/Invoice/InvoiceController/index.ts +127 -127
  84. package/src/Invoice/_test/buyerNameSearch/index.tsx +42 -42
  85. package/src/Invoice/_test/children/index.tsx +214 -214
  86. package/src/Invoice/_test/deduction/index.tsx +957 -957
  87. package/src/Invoice/_test/draft/index.tsx +40 -40
  88. package/src/Invoice/_test/easiest/index.tsx +5 -5
  89. package/src/Invoice/_test/endowCode/index.tsx +1158 -1158
  90. package/src/Invoice/_test/goodsMenuExpand/index.tsx +32 -32
  91. package/src/Invoice/_test/importBuyer/index.tsx +74 -74
  92. package/src/Invoice/_test/importGoods/index.tsx +1197 -1197
  93. package/src/Invoice/_test/invoiceType/index.tsx +59 -59
  94. package/src/Invoice/_test/isInvoiceNo/index.tsx +12 -12
  95. package/src/Invoice/_test/replaceHead/index.tsx +22 -22
  96. package/src/Invoice/_test/retrieveData/index.tsx +22 -22
  97. package/src/Invoice/_test/seller/index.tsx +28 -28
  98. package/src/Invoice/_test/setDataSource/index.tsx +73 -73
  99. package/src/Invoice/_test/unit/index.tsx +19 -19
  100. package/src/Invoice/index.less +31 -31
  101. package/src/Invoice/index.md +56 -56
  102. package/src/Invoice/index.tsx +200 -200
  103. package/src/Invoice/tools/calculate/index.ts +144 -144
  104. package/src/Invoice/tools/coolingFn/index.ts +17 -17
  105. package/src/Invoice/tools/evaluate/index.ts +7 -7
  106. package/src/Invoice/tools/idGenerator/index.ts +2 -2
  107. package/src/Invoice/tools/itemName/index.ts +55 -55
  108. package/src/Invoice/tools/lazyFn/index.ts +19 -19
  109. package/src/Invoice/tools/mounting/index.ts +13 -13
  110. package/src/Invoice/tools/strringFn/index.ts +40 -40
  111. package/src/Invoice/tools/useToGenerateId/index.ts +12 -12
  112. package/src/Invoice/tools/utils/index.ts +1 -1
  113. package/src/Invoice/tools/utils/money/index.ts +20 -20
  114. package/src/Invoice/ui/default/AddComparisonDrawer/index.tsx +149 -149
  115. package/src/Invoice/ui/default/Buyer/index.less +219 -219
  116. package/src/Invoice/ui/default/Buyer/index.tsx +114 -114
  117. package/src/Invoice/ui/default/Buyer/ui/BuyerNameInput/index.tsx +166 -166
  118. package/src/Invoice/ui/default/Buyer/ui/ImportBuyerButton/index.tsx +21 -21
  119. package/src/Invoice/ui/default/EndowCodeDrawer/index.less +8 -8
  120. package/src/Invoice/ui/default/EndowCodeDrawer/index.tsx +612 -612
  121. package/src/Invoice/ui/default/GoodsList/hook/useColumns/autoFillFn/index.ts +647 -647
  122. package/src/Invoice/ui/default/GoodsList/hook/useColumns/index.tsx +719 -719
  123. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
  124. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
  125. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Expand/index.tsx +57 -57
  126. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.less +18 -18
  127. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.tsx +49 -49
  128. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +17 -17
  129. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +91 -91
  130. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  131. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  132. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +118 -118
  133. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/dist/index.js +32 -32
  134. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
  135. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +25 -25
  136. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
  137. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +99 -99
  138. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  139. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  140. package/src/Invoice/ui/default/GoodsList/hook/useDeduction/index.tsx +24 -24
  141. package/src/Invoice/ui/default/GoodsList/hook/useOnRow/index.tsx +52 -52
  142. package/src/Invoice/ui/default/GoodsList/hook/useRowSelection/index.tsx +120 -120
  143. package/src/Invoice/ui/default/GoodsList/hook/useWindowClick/index.tsx +23 -23
  144. package/src/Invoice/ui/default/GoodsList/index.less +185 -185
  145. package/src/Invoice/ui/default/GoodsList/index.tsx +207 -207
  146. package/src/Invoice/ui/default/GoodsList/ui/AddRowButton/index.tsx +72 -72
  147. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.less +21 -21
  148. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +244 -244
  149. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  150. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +69 -69
  151. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +65 -65
  152. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDetails/index.tsx +91 -91
  153. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDiscount/index.tsx +36 -36
  154. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesDiscount/index.tsx +109 -109
  155. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesGifts/index.tsx +94 -94
  156. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/index.tsx +37 -37
  157. package/src/Invoice/ui/default/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
  158. package/src/Invoice/ui/default/GoodsList/ui/Search/index.less +10 -10
  159. package/src/Invoice/ui/default/GoodsList/ui/Search/index.tsx +52 -52
  160. package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.less +18 -18
  161. package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.tsx +114 -114
  162. package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.less +40 -40
  163. package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.tsx +71 -71
  164. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.less +38 -38
  165. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.tsx +130 -130
  166. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.less +44 -44
  167. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.tsx +96 -96
  168. package/src/Invoice/ui/default/GoodsList/ui/TaxIncludedSwitch/index.tsx +31 -31
  169. package/src/Invoice/ui/default/ImportBuyerDrawer/index.tsx +75 -75
  170. package/src/Invoice/ui/default/ImportGoodsDrawer/index.tsx +201 -201
  171. package/src/Invoice/ui/default/InvoiceHeader/index.less +68 -68
  172. package/src/Invoice/ui/default/InvoiceHeader/index.tsx +246 -246
  173. package/src/Invoice/ui/default/Seller/index.less +113 -113
  174. package/src/Invoice/ui/default/Seller/index.tsx +98 -98
  175. package/src/Invoice/ui/default/Sign/index.less +14 -14
  176. package/src/Invoice/ui/default/Sign/index.tsx +71 -71
  177. package/src/Invoice/ui/digtal/Architecture/index.less +18 -18
  178. package/src/Invoice/ui/digtal/Architecture/index.tsx +177 -177
  179. package/src/Invoice/ui/digtal/FreightList/hook/useColumns/dist/index.js +616 -616
  180. package/src/Invoice/ui/digtal/FreightList/hook/useColumns/index.tsx +246 -246
  181. package/src/Invoice/ui/digtal/FreightList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  182. package/src/Invoice/ui/digtal/FreightList/hook/useOnRow/index.tsx +37 -37
  183. package/src/Invoice/ui/digtal/FreightList/hook/useRowSelection/index.tsx +119 -119
  184. package/src/Invoice/ui/digtal/FreightList/hook/useWindowClick/index.tsx +23 -23
  185. package/src/Invoice/ui/digtal/FreightList/index.less +72 -72
  186. package/src/Invoice/ui/digtal/FreightList/index.tsx +129 -129
  187. package/src/Invoice/ui/digtal/FreightList/ui/AddRowButton/index.tsx +74 -74
  188. package/src/Invoice/ui/digtal/FreightList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
  189. package/src/Invoice/ui/digtal/FreightList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +36 -36
  190. package/src/Invoice/ui/digtal/FreightList/ui/TableRow/index.less +28 -28
  191. package/src/Invoice/ui/digtal/FreightList/ui/TableRow/index.tsx +20 -20
  192. package/src/Invoice/ui/digtal/FreightList/ui/TableVirtual/index.less +38 -38
  193. package/src/Invoice/ui/digtal/FreightList/ui/TableVirtual/index.tsx +108 -108
  194. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/autoFillFn/index.ts +683 -683
  195. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/dist/index.js +616 -616
  196. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/index.tsx +724 -724
  197. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/svg/plus.svg +11 -11
  198. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
  199. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
  200. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +9 -9
  201. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +87 -87
  202. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  203. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  204. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +76 -76
  205. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
  206. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +34 -34
  207. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
  208. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +98 -98
  209. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  210. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  211. package/src/Invoice/ui/digtal/GoodsList/hook/useOnRow/index.tsx +51 -51
  212. package/src/Invoice/ui/digtal/GoodsList/hook/useRowSelection/index.tsx +121 -121
  213. package/src/Invoice/ui/digtal/GoodsList/hook/useWindowClick/index.tsx +23 -23
  214. package/src/Invoice/ui/digtal/GoodsList/index.less +56 -56
  215. package/src/Invoice/ui/digtal/GoodsList/index.tsx +181 -181
  216. package/src/Invoice/ui/digtal/GoodsList/ui/AddRowButton/index.tsx +87 -87
  217. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +340 -340
  218. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/svg/add.svg +11 -11
  219. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  220. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
  221. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +37 -37
  222. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +82 -82
  223. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useReselectInvoiceType/index.tsx +57 -57
  224. package/src/Invoice/ui/digtal/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
  225. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.less +11 -11
  226. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.tsx +60 -60
  227. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.less +53 -53
  228. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.tsx +98 -98
  229. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/svg/fork.svg +11 -11
  230. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.less +28 -28
  231. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.tsx +52 -52
  232. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.less +38 -38
  233. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.tsx +113 -113
  234. package/src/Invoice/ui/digtal/GoodsList/ui/TaxIncludedSwitch/index.tsx +34 -34
  235. package/src/Invoice/ui/digtal/InvoiceHeader/index.less +57 -57
  236. package/src/Invoice/ui/digtal/InvoiceHeader/index.tsx +77 -77
  237. package/src/Invoice/ui/digtal/PayList/hook/useColumns/dist/index.js +616 -616
  238. package/src/Invoice/ui/digtal/PayList/hook/useColumns/index.tsx +168 -168
  239. package/src/Invoice/ui/digtal/PayList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  240. package/src/Invoice/ui/digtal/PayList/hook/useOnRow/index.tsx +37 -37
  241. package/src/Invoice/ui/digtal/PayList/hook/useRowSelection/index.tsx +119 -119
  242. package/src/Invoice/ui/digtal/PayList/hook/useWindowClick/index.tsx +19 -19
  243. package/src/Invoice/ui/digtal/PayList/index.less +72 -72
  244. package/src/Invoice/ui/digtal/PayList/index.tsx +132 -132
  245. package/src/Invoice/ui/digtal/PayList/ui/AddRowButton/index.tsx +74 -74
  246. package/src/Invoice/ui/digtal/PayList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
  247. package/src/Invoice/ui/digtal/PayList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +36 -36
  248. package/src/Invoice/ui/digtal/PayList/ui/TableRow/index.less +28 -28
  249. package/src/Invoice/ui/digtal/PayList/ui/TableRow/index.tsx +20 -20
  250. package/src/Invoice/ui/digtal/PayList/ui/TableVirtual/index.less +38 -38
  251. package/src/Invoice/ui/digtal/PayList/ui/TableVirtual/index.tsx +108 -108
  252. package/src/Invoice/ui/digtal/RealEstateInfo/index.less +21 -21
  253. package/src/Invoice/ui/digtal/RealEstateInfo/index.tsx +451 -451
  254. package/src/Invoice/ui/digtal/Sign/index.less +48 -48
  255. package/src/Invoice/ui/digtal/Sign/index.tsx +99 -99
  256. package/src/Invoice/ui/digtal/StakeFarmerholder/index.less +99 -99
  257. package/src/Invoice/ui/digtal/StakeFarmerholder/index.tsx +1102 -1096
  258. package/src/Invoice/ui/digtal/StakeFarmerholder/svg/arrowDown.svg +2 -2
  259. package/src/Invoice/ui/digtal/StakeFarmerholder/svg/arrowUp.svg +2 -2
  260. package/src/Invoice/ui/digtal/StakeFarmerholder/svg/plus.svg +11 -11
  261. package/src/Invoice/ui/digtal/Stakeholder/index.less +99 -99
  262. package/src/Invoice/ui/digtal/Stakeholder/index.tsx +453 -453
  263. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowDown.svg +2 -2
  264. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowUp.svg +2 -2
  265. package/src/Invoice/ui/digtal/Stakeholder/svg/plus.svg +11 -11
  266. package/src/InvoiceTypeModal/_test/easiest/index.tsx +31 -31
  267. package/src/InvoiceTypeModal/dist/index.js +92 -92
  268. package/src/InvoiceTypeModal/index.less +7 -7
  269. package/src/InvoiceTypeModal/index.md +5 -5
  270. package/src/InvoiceTypeModal/index.tsx +161 -161
  271. package/src/TaxClassificationCodeModal/_test/easiest/index.tsx +184 -184
  272. package/src/TaxClassificationCodeModal/index.less +17 -17
  273. package/src/TaxClassificationCodeModal/index.md +6 -6
  274. package/src/TaxClassificationCodeModal/index.tsx +152 -152
  275. package/src/index.ts +13 -13
  276. package/tsconfig.json +31 -31
  277. package/typings.d.ts +3 -3
@@ -1,1096 +1,1102 @@
1
-
2
- import React, { useCallback } 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, Select, 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 "../../..";
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
- { required: true, message: `${label}必填` },
29
- { max: 100, message: `${label}内容超长` },
30
- { pattern: /^[0-9\s\-\+]+$/g, message: `${label}仅能数字、空格、-、+` }
31
- ],
32
- sellerTelPhone: (label: string) => [
33
-
34
- { max: 100, message: `${label}内容超长` },
35
- { pattern: /^[0-9\s\-\+]+$/g, message: `${label}仅能数字、空格、-、+` }
36
- ],
37
- bankName: (label: string) => [
38
- { max: 100, message: `${label}内容超长` }
39
- ],
40
- bankAccount: (label: string) => [
41
- { max: 100, message: `${label}内容超长` },
42
- { pattern: /^([0-9a-zA-Z-\s])*$/g, message: `${label}仅能数字、字母、-、空格` }
43
- ],
44
- certificateNumber: (label: string) => [
45
- { required: true, message: `${label}必填` },
46
- { max: 30, message: `${label}内容超长` },
47
- { pattern: /^([a-zA-Z0-9])*$/g, message: `${label}仅能数字、英文` }
48
- ],
49
- }
50
-
51
- const formatCompanyName = (e: any) => {
52
- const value = e?.target?.value;
53
- if (value) {
54
- return value.replace('(', '(').replace(')', ')').replace(' ', '');
55
- }
56
- }
57
-
58
- export interface IStakeholder {
59
-
60
- /** 是否显示导入按钮 */
61
- isShowImportButton?: boolean;
62
-
63
- /** 点击了 */
64
- onClickImportButton?: (e: InvoiceController) => void
65
-
66
- /** 查看当前可用授信额度 */
67
- lineCredit?: React.ReactNode;
68
-
69
- /** 票种类型 */
70
- isVatNormal?: boolean;
71
-
72
- /** 是否可以选择自然人 */
73
- isNaturalPerson?: boolean;
74
-
75
- /** 是否展开 */
76
- isExpand?: boolean;
77
-
78
- leqi?: boolean;
79
-
80
- riskData?: any;
81
-
82
- invoiceMarkCallback?: (value: any) => void;
83
- }
84
-
85
- /** 农产品干系人 */
86
- export default decorator<IStakeholder, IStakeholder & FormComponentProps>(Form.create())(props => {
87
-
88
- const { form, isShowImportButton, onClickImportButton, isVatNormal = false } = props;
89
-
90
- const [isExpand, setExpand] = React.useState(typeof props.isExpand === 'boolean' ? props.isExpand : true);
91
-
92
- const { getFieldDecorator } = form;
93
-
94
- const controller = Invoice.useInvoiceController();
95
-
96
- const model = controller.useMemo(s => s.model, []);
97
-
98
- const disableds = controller.useMemo(s => s.stakeholder.disableds || [], []);
99
-
100
- const rulesMap = controller.useMemo(s => s.stakeholder.rulesMap || {}, []);
101
- const [validateStatus, setStatus] = React.useState<any>('');
102
- const [errorInfo, setInfo] = React.useState('');
103
- const [nation, setNationStatue] = React.useState<any>('');
104
- const [nationInfo, setNation] = React.useState('');
105
- /** 乐企 */
106
- const leqispanW = React.useMemo(() => {
107
- if (props.leqi) {
108
- return 0;
109
- } else {
110
- return 2;
111
- }
112
- }, [props.leqi, props.riskData]);
113
- /** 直连 */
114
- const riskspanW = React.useMemo(() => {
115
- if (props.riskData?.code === 'success') {
116
- return 0;
117
- } else {
118
- return 2;
119
- }
120
- }, [props.leqi, props.riskData]);
121
-
122
- const readOnly = React.useMemo(() => {
123
- if (model === 'readOnly') return true;
124
- if (model === 'prefab') return true;
125
- return false;
126
- }, [model]);
127
-
128
- const onExpand = React.useCallback(() => { setExpand(e => !e) }, []);
129
-
130
- const isReadOnly = React.useCallback(field => readOnly || disableds.indexOf(field) >= 0, [disableds, readOnly]);
131
-
132
- const getRules = React.useCallback((field, defaultRules) => {
133
- if (isReadOnly(field)) return [];
134
- return rulesMap[field] || defaultRules;
135
- }, [rulesMap, isReadOnly, isReadOnly]);
136
-
137
- controller.useForm('stakeholder', form);
138
-
139
- // props.isExpand 变化的时候更新
140
- React.useEffect(() => {
141
- setExpand(typeof props.isExpand === 'boolean' ? props.isExpand : true);
142
- }, [props.isExpand])
143
- const onChangeType = useCallback(
144
- (value: string) => {
145
- const supplierTaxId = form?.getFieldValue("supplierTaxId");
146
- const certificateNumber = form?.getFieldValue("certificateNumber");
147
- const nationality = form?.getFieldValue("nationality");
148
- if (value === "201") {
149
- // 当“自然人证件类型”选择“201:居民身份证”时,校验是否为“156:中国’
150
- form?.setFieldsValue({ nationality: "156" });
151
- setNationStatue('');
152
- setNation('');
153
- if (supplierTaxId !== certificateNumber) {
154
- setStatus('error');
155
- setInfo('证件号码应与销方税号保持一致')
156
- }
157
- } else if (value === "210") {
158
- if (value.startsWith("M")) {
159
- //如果“证件号码”以M开头,"国籍(或地区头,)”必须为“446:中国澳门”;校验证件号码必须以H或M开头
160
- if (nationality !== '446') {
161
- setNationStatue('error');
162
- setNation('请选择正确的国籍');
163
- } else {
164
- setNationStatue('');
165
- setNation('');
166
- }
167
-
168
- } else if (value.startsWith("H")) {
169
- //如果“证件号码”以H开国籍(或地区)”必须为“344:中国香港”;
170
- if (nationality !== '344') {
171
- setNationStatue('error');
172
- setNation('请选择正确的国籍');
173
- } else {
174
- setNationStatue('');
175
- setNation('');
176
- }
177
-
178
- } else {
179
- setStatus('error');
180
- setInfo('请输入正确的证件号码')
181
- }
182
- } else if (value === "237") {
183
- if (value.startsWith("810000")) {
184
- if (nationality !== '344') {
185
- setNationStatue('error');
186
- setNation('请选择正确的国籍');
187
- } else {
188
- setNationStatue('');
189
- setNation('');
190
- }
191
-
192
- } else if (value.startsWith("820000")) {
193
- if (nationality !== '446') {
194
- setNationStatue('error');
195
- setNation('请选择正确的国籍');
196
- } else {
197
- setNationStatue('');
198
- setNation('');
199
- }
200
-
201
-
202
- } else {
203
- setStatus('error');
204
- setInfo('请输入正确的证件号码')
205
- return Promise.reject("请输入正确的证件号码");
206
- }
207
- } else if (value === "227") {
208
-
209
- // 当“自然人证件类型”选择“227:中华人民共和国护照”时,校验是否为“156:中国
210
- form?.setFieldsValue({ nationality: "156" });
211
-
212
- } else if (value === "213" || value === "238") {
213
- // 当“自然人证件类型”选择“213:台湾居民来往大陆通行证”时,校验是否为”158:中国台湾”
214
- // 当“自然人证件类型”选择“238:中华人民共和国台湾居民居住证”时,校验是否为“ 158:中国台湾”
215
- form?.setFieldsValue({ nationality: "158" });
216
- }
217
- },
218
- [form]
219
- );
220
- /** 校验证件号码*/
221
- const validateIDCode = useCallback(
222
- (_: any, value: string) => {
223
- if (!value) {
224
- setStatus('error');
225
- setInfo('请输入正确的证件号码')
226
- return Promise.resolve();
227
- }
228
-
229
- const idtype = form?.getFieldValue("certificateType");
230
- const nationality = form?.getFieldValue("nationality");
231
- if (idtype === "210") {
232
- // 当“自然人证件类型”选择“210:港澳居民来往内地通行证”时,
233
-
234
-
235
- if (value.startsWith("M")) {
236
- //如果“证件号码”以M开头,"国籍(或地区头,)”必须为“446:中国澳门”;校验证件号码必须以H或M开头
237
- if (nationality !== '446') {
238
- setNationStatue('error');
239
- setNation('请选择正确的国籍');
240
- } else {
241
- setNationStatue('');
242
- setNation('');
243
- }
244
-
245
- } else if (value.startsWith("H")) {
246
- //如果“证件号码”以H开国籍(或地区)”必须为“344:中国香港”;
247
- if (nationality !== '344') {
248
- setNationStatue('error');
249
- setNation('请选择正确的国籍');
250
- } else {
251
- setNationStatue('');
252
- setNation('');
253
- }
254
-
255
- } else {
256
- setStatus('error');
257
- setInfo('请输入正确的证件号码')
258
- return Promise.reject("请输入正确的证件号码");
259
- }
260
- } else if (idtype === "237") {
261
- //当“自然人证件类型”选择“237:中华人民共和国港澳居民居住证”时,校验证件号码必须以810000或820000开头,如果“证件号码”以810000开头,必须为“344:中国香国籍(或地区))港”;如果“证件号码”以820000开头,国籍(或地区)必须为“446:中国澳门”
262
- if (value.startsWith("810000")) {
263
- if (nationality !== '344') {
264
- setNationStatue('error');
265
- setNation('请选择正确的国籍');
266
- } else {
267
- setNationStatue('');
268
- setNation('');
269
- }
270
-
271
- } else if (value.startsWith("820000")) {
272
- if (nationality !== '446') {
273
- setNationStatue('error');
274
- setNation('请选择正确的国籍');
275
- } else {
276
- setNationStatue('');
277
- setNation('');
278
- }
279
-
280
-
281
- } else {
282
- setStatus('error');
283
- setInfo('请输入正确的证件号码')
284
- return Promise.reject("请输入正确的证件号码");
285
- }
286
- }
287
- // 当“销售方自然人证件类型”填写“201:居民身份证”,“销售方纳税人识别号”必须与“销售方自然人证件号码”完全一致
288
- if (idtype === "201") {
289
- const supplierTaxId = form?.getFieldValue("supplierTaxId");
290
- if (value !== supplierTaxId) {
291
- setStatus('error');
292
- setInfo('证件号码应与销方税号保持一致')
293
- return Promise.reject("证件号码应与销方税号保持一致");
294
- } else if (value === supplierTaxId) {
295
- setStatus('');
296
- setInfo('')
297
- }
298
- }
299
- setStatus('');
300
- setInfo('')
301
- return Promise.resolve();
302
- },
303
- [form]
304
- );
305
- const validateIDCode2 = useCallback(
306
- (e: any) => {
307
- const value = e.target.value;
308
- // if (!value) {
309
- // setStatus('');
310
- // setInfo('')
311
- // }
312
-
313
- const idtype = form?.getFieldValue("certificateType");
314
-
315
- // // 当“销售方自然人证件类型”填写“201:居民身份证”,“销售方纳税人识别号”必须与“销售方自然人证件号码”完全一致
316
- if (idtype === "201") {
317
- const certificateNumber = form?.getFieldValue("certificateNumber");
318
- console.log(value, certificateNumber)
319
- if (value !== certificateNumber) {
320
- setStatus('error');
321
- setInfo('证件号码应与销方税号保持一致')
322
- } else {
323
- setStatus('');
324
- setInfo('')
325
- }
326
- }
327
- },
328
- [form]
329
- );
330
- const validateNationality = useCallback(
331
- (_: any, value: string) => {
332
- if (!value) {
333
- setNationStatue('error');
334
- setNation('请选择正确的国籍');
335
- return Promise.resolve();
336
- }
337
- const idtype = form?.getFieldValue("certificateType");
338
- const idcode = form?.getFieldValue("certificateNumber");
339
- console.log(value, idtype, idcode)
340
- if (idtype === "201" || idtype === "227") {
341
- // 当“自然人证件类型”选择“201:居民身份证”时,校验是否为“156:中国’
342
- // 当“自然人证件类型”选择“227:中华人民共和国护照”时,校验是否为“156:中国
343
- if (value !== "156") {
344
- setNationStatue('error');
345
- setNation('请选择正确的国籍');
346
- return Promise.reject("请选择正确的国籍");
347
- }
348
- } else if (idtype === "213" || idtype === "238") {
349
- // 当“自然人证件类型”选择“213:台湾居民来往大陆通行证”时,校验是否为”158:中国台湾”
350
- // 当“自然人证件类型”选择“238:中华人民共和国台湾居民居住证”时,校验是否为“ 158:中国台湾”
351
- if (value !== "158") {
352
- setNationStatue('error');
353
- setNation('请选择正确的国籍');
354
- return Promise.reject("请选择正确的国籍");
355
- }
356
- } else if (idtype === "210") {
357
- //当“自然人证件类型”选择“210:港澳居民来往内地通行证”时,如果“证件号码”以H开国籍(或地区)”必须为“344:中国香港”;如果“证件号码”以M开头,"国籍(或地区头,)”必须为“446:中国澳门”;
358
- let r = false;
359
- if (idcode) {
360
- if (idcode.startsWith("M") && value === "446") {
361
- r = true;
362
- } else if (idcode.startsWith("H") && value === "344") {
363
- r = true;
364
- }
365
- } else if (value === "344" || value === "446") {
366
- r = true;
367
- }
368
- if (!r) {
369
- setNationStatue('error');
370
- setNation('请选择正确的国籍');
371
- return Promise.reject("请选择正确的国籍");
372
- }
373
- } else if (idtype === "237") {
374
- //当“自然人证件类型”选择“237:中华人民共和国港澳居民居住证”时,校验证件号码必须以810000或820000开头,如果“证件号码”以810000开头,必须为“344:中国香国籍(或地区))港”;如果“证件号码”以820000开头,国籍(或地区)必须为“446:中国澳门”
375
- let r = false;
376
- if (idcode) {
377
- if (idcode.startsWith("820000") && value === "446") {
378
- r = true;
379
- } else if (idcode.startsWith("810000") && value === "344") {
380
- r = true;
381
- }
382
- } else if (value === "344" || value === "446") {
383
- r = true;
384
- }
385
- if (!r) {
386
- setNationStatue('error');
387
- setNation('请选择正确的国籍');
388
- return Promise.reject("请选择正确的国籍");
389
- }
390
- }
391
- setNationStatue('');
392
- setNation('');
393
- return Promise.resolve();
394
- },
395
- [form]
396
- );
397
- return (
398
- <>
399
- <div className={classNames("kts-invoice-operate-invoice-digtal-stakeholder", { readOnly: readOnly })} >
400
- <div>
401
- {'销售方信息'.split('').map(e => <span>{e}</span>)}
402
- {
403
- !readOnly &&
404
- <Icon
405
- className="digtal-stakeholder-expand-button"
406
- component={isExpand ? ArrowUpSvg : ArrowDownSvg}
407
- onClick={onExpand}
408
- />
409
- }
410
- </div>
411
- <div>
412
- <div style={{ marginTop: 20 }} className='natural-person-flag' >
413
- {
414
- props.isNaturalPerson === true &&
415
- <Form.Item colon={false}>
416
- {getFieldDecorator('naturalPersonFlag', {
417
- })(
418
- <NaturalPersonFlag readOnly={isReadOnly('naturalPersonFlag')} />
419
- )}
420
- </Form.Item>
421
- }
422
- </div>
423
- <Form className="digtal-stakeholder-form" >
424
- <Row gutter={[16, 0]}>
425
- <Col span={24} >
426
- <Form.Item label='名称' colon={false}>
427
- {getFieldDecorator('supplierName', {
428
- rules: getRules('supplierName', RULES.companyName('销售方名称')),
429
- // getValueFromEvent: formatCompanyName
430
- })
431
- // (<MyInput readOnly={isReadOnly('supplierName')} placeholder="请输入名称" autoComplete="off" />)
432
- (
433
- <BuyerNameInput
434
- myform={form}
435
- fieldName='supplierName'
436
- readOnly={isReadOnly('supplierName')}
437
- placeholder="请输入名称"
438
- autoComplete="off"
439
- suffix={
440
- isShowImportButton === true &&
441
- <Button
442
- type='link'
443
- style={{ padding: 0, width: 20, height: '100%' }}
444
- icon={<Icon component={PlusSvg} />}
445
- onClick={() => { onClickImportButton && onClickImportButton(controller) }}
446
- />
447
- }
448
- />
449
- )
450
- }
451
- </Form.Item>
452
- </Col>
453
-
454
- <Col span={24} >
455
- <Form.Item label='统一社会信用代码/纳税人识别号' colon={false}>
456
- {getFieldDecorator('supplierTaxId', {
457
- rules: getRules('supplierTaxId', [{ required: true, message: '销售方纳税人识别号必填' }, ...RULES.taxId('销售方纳税人识别号')])
458
- })
459
- // (<MyInput readOnly={isReadOnly('supplierTaxId')} placeholder="请输入统一社会信用代码/纳税人识别号" autoComplete="off" />)
460
- (<BuyerNameInput
461
- onChange={validateIDCode2}
462
- myform={form}
463
- fieldName='supplierTaxId'
464
- readOnly={isReadOnly('supplierTaxId')}
465
- placeholder="请输入统一社会信用代码/纳税人识别号"
466
- autoComplete="off"
467
- />)
468
- }
469
- </Form.Item>
470
- </Col>
471
-
472
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
473
- <Form.Item label='销售方地址' colon={false}>
474
- {getFieldDecorator('sellerAddress', {
475
- rules: getRules('sellerAddress', [{ max: 300, message: '销售方地址内容超长' }])
476
- })(<MyInput readOnly={isReadOnly('sellerAddress')} placeholder="请输入销售方地址" autoComplete="off" />)}
477
- </Form.Item>
478
- </Col>
479
-
480
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
481
- <Form.Item label='电话' colon={false} className='telephone' >
482
- {getFieldDecorator('sellerPhone', {
483
- rules: getRules('sellerPhone', RULES.sellerTelPhone('销售方电话'))
484
- })(<MyInput readOnly={isReadOnly('sellerPhone')} placeholder="请输入电话" autoComplete="off" />)}
485
- </Form.Item>
486
- </Col>
487
-
488
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
489
- <Form.Item label='销售方开户银行' colon={false}>
490
- {getFieldDecorator('sellerBank', {
491
- rules: getRules('sellerBank', RULES.bankName('销售方开户银行'))
492
- })(<MyInput readOnly={isReadOnly('sellerBank')} placeholder="请输入销售方开户银行" autoComplete="off" />)}
493
- </Form.Item>
494
- </Col>
495
- {(props.leqi) &&
496
- <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
497
- <Form.Item colon={false}>
498
- {getFieldDecorator('sellerAddressPhoneFlag', {
499
- valuePropName: 'checked',
500
- })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('sellerAddressPhoneFlag')} style={{ whiteSpace: 'nowrap' }}>是否展示</Checkbox>)}
501
- </Form.Item>
502
- </Col>
503
- }
504
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
505
- <Form.Item label='银行账号' colon={false}>
506
- {getFieldDecorator('sellerAccount', {
507
- rules: getRules('sellerAccount', RULES.bankAccount('销售方银行账号'))
508
- })(<MyInput readOnly={isReadOnly('sellerAccount')} placeholder="请输入银行账号" autoComplete="off" />)}
509
- </Form.Item>
510
- </Col>
511
- {(props.leqi || props.riskData?.code === 'success') &&
512
- <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
513
- <Form.Item colon={false}>
514
- {getFieldDecorator('sellerBankAccountFlag', {
515
- valuePropName: 'checked',
516
- })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('sellerBankAccountFlag')} style={{ whiteSpace: 'nowrap' }}>是否展示</Checkbox>)}
517
- </Form.Item>
518
- </Col>
519
- }
520
- </Row>
521
- </Form>
522
- </div>
523
- <div>
524
- {'购买方信息'.split('').map(e => <span>{e}</span>)}
525
- {
526
- !readOnly &&
527
- <Icon
528
- className="digtal-stakeholder-expand-button"
529
- component={isExpand ? ArrowUpSvg : ArrowDownSvg}
530
- onClick={onExpand}
531
- />
532
- }
533
- </div>
534
- <div>
535
- {
536
- !readOnly && props.lineCredit &&
537
- <div style={{ marginTop: 20 }} >
538
- <Tooltip trigger="click" title={props.lineCredit} >
539
- <Button type="link" style={{ padding: `0px 8px` }} >查看当前可用授信额度</Button>
540
- </Tooltip>
541
- </div>
542
- }
543
-
544
- <Form className="digtal-stakeholder-form" >
545
- <Row gutter={[16, 0]}>
546
- <Col span={24} >
547
- <Form.Item label='名称' colon={false}>
548
- {getFieldDecorator('buyerName', {
549
- rules: getRules('buyerName', RULES.companyName('购买方名称')),
550
- })(
551
- <BuyerNameInput
552
- myform={form}
553
- fieldName='buyerName'
554
- readOnly={isReadOnly('buyerName')}
555
- placeholder="请输入名称"
556
- autoComplete="off"
557
- suffix={
558
- isShowImportButton === true &&
559
- <Button
560
- type='link'
561
- style={{ padding: 0, width: 20, height: '100%' }}
562
- icon={<Icon component={PlusSvg} />}
563
- onClick={() => { onClickImportButton && onClickImportButton(controller) }}
564
- />
565
- }
566
- />
567
- )}
568
- </Form.Item>
569
- </Col>
570
-
571
- <Col span={24} >
572
- <Form.Item label='统一社会信用代码/纳税人识别号' colon={false}>
573
- {getFieldDecorator('buyerTaxId', {
574
- rules: getRules('buyerTaxId', [{ required: !isVatNormal, message: '购买方纳税人识别号必填' }, ...RULES.taxId('购买方纳税人识别号')])
575
- })(
576
- <BuyerNameInput
577
- myform={form}
578
- fieldName='buyerTaxId'
579
- readOnly={isReadOnly('buyerTaxId')}
580
- placeholder="请输入统一社会信用代码/纳税人识别号"
581
- autoComplete="off"
582
- />
583
- )}
584
- </Form.Item>
585
- </Col>
586
-
587
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
588
- <Form.Item label='购买方地址' colon={false}>
589
- {getFieldDecorator('buyerAddress', {
590
- rules: getRules('buyerAddress', [{ max: 100, message: '购买方地址内容超长' }])
591
- })(<MyInput readOnly={isReadOnly('buyerAddress')} placeholder="请输入购买方地址" autoComplete="off" />)}
592
- </Form.Item>
593
- </Col>
594
-
595
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
596
- <Form.Item label='电话' colon={false} className='telephone'>
597
- {getFieldDecorator('buyerPhone', {
598
- rules: getRules('buyerPhone', RULES.buyerTelPhone('购买方电话'))
599
- })(<MyInput readOnly={isReadOnly('buyerPhone')} placeholder="请输入电话" autoComplete="off" />)}
600
- </Form.Item>
601
- </Col>
602
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
603
- <Form.Item label='购买方开户银行' colon={false}>
604
- {getFieldDecorator('buyerBank', {
605
- rules: getRules('buyerBank', RULES.bankName('购买方开户银行'))
606
- })(<MyInput readOnly={isReadOnly('buyerBank')} placeholder="请输入购买方开户银行" autoComplete="off" />)}
607
- </Form.Item>
608
- </Col>
609
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
610
- <Form.Item label='购买方开户银行' colon={false}>
611
- {getFieldDecorator('buyerBank', {
612
- rules: getRules('buyerBank', RULES.bankName('购买方开户银行'))
613
- })(<MyInput readOnly={isReadOnly('buyerBank')} placeholder="请输入购买方开户银行" autoComplete="off" />)}
614
- </Form.Item>
615
- </Col>
616
-
617
- <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
618
- <Form.Item label='银行账号' colon={false}>
619
- {getFieldDecorator('buyerAccount', {
620
- rules: getRules('buyerAccount', RULES.bankAccount('购买方银行账号'))
621
- })(<MyInput readOnly={isReadOnly('buyerAccount')} placeholder="请输入银行账号" autoComplete="off" />)}
622
- </Form.Item>
623
- </Col>
624
- {(props.leqi || props.riskData?.code === 'success') &&
625
- <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
626
- <Form.Item colon={false}>
627
- {getFieldDecorator('buyerBankAccountFlag', {
628
- valuePropName: 'checked',
629
- })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('buyerBankAccountFlag')} style={{ whiteSpace: 'nowrap' }}>是否展示</Checkbox>)}
630
- </Form.Item>
631
- </Col>
632
- }
633
- </Row>
634
- </Form>
635
- </div>
636
-
637
- </div>
638
- <div className='kts-invoice-operate-invoice-digtal-payinfo'>
639
- <Form className="digtal-stakeholder-form" style={{ width: '100%' }}>
640
- <Row gutter={[16, 0]}>
641
- <Col span={5} >
642
- <Form.Item label='自然人销售方补充信息' colon={false} >
643
-
644
- </Form.Item>
645
- </Col>
646
- {/* <label>自然人销售方补充信息</label> */}
647
- <Col span={6} >
648
- <Form.Item label='证件类型' colon={false} >
649
- {getFieldDecorator('certificateType', {
650
- rules: [{ required: true, message: '数据必填' }]
651
- })(<CardSelect onChange={onChangeType} readOnly={isReadOnly('certificateType')} placeholder="数据必填" autoComplete="off" />)}
652
- </Form.Item>
653
- </Col>
654
- <Col span={7} >
655
- <Form.Item label='证件号码' colon={false} validateStatus={validateStatus} help={errorInfo}>
656
- {getFieldDecorator('certificateNumber', {
657
- rules: [{ required: true, message: '数据必填' }, { max: 30, message: `内容超长` }, { validator: validateIDCode },]
658
- })(<MyInput readOnly={isReadOnly('certificateNumber')} placeholder="数据必填" autoComplete="off" />)}
659
- </Form.Item>
660
- </Col>
661
- <Col span={6} >
662
- <Form.Item label='国籍(或地区)' colon={false} validateStatus={nation} help={nationInfo}>
663
- {getFieldDecorator('nationality', {
664
- rules: [{ required: true, message: '数据必填' }, { validator: validateNationality }]
665
- })(<NationalSelect showSearch={true}
666
- optionFilterProp="children"
667
- filterOption={(input: any, option: any) => {
668
- if (option) {
669
- return option.label?.indexOf(input) >= 0;
670
- }
671
- return false;
672
- }} readOnly={isReadOnly('nationality')} placeholder="数据必填" autoComplete="off" />)}
673
- </Form.Item>
674
- </Col>
675
- </Row>
676
- </Form>
677
-
678
- </div>
679
- </>
680
- )
681
- })
682
-
683
- function NaturalPersonFlag(props: {
684
- // NATURAL("自然人"), COMPANY("非自然人");
685
- value?: 'COMPANY' | 'NATURAL',
686
- onChange?: (e: 'COMPANY' | 'NATURAL') => void
687
- readOnly?: boolean;
688
- }) {
689
-
690
- const [value, setValue] = React.useState(props.value || 'COMPANY');
691
-
692
- const onChange = React.useCallback((e: CheckboxChangeEvent) => {
693
- if (props.readOnly) return;
694
- setValue(e.target.checked ? 'NATURAL' : 'COMPANY');
695
- props.onChange && props.onChange(e.target.checked ? 'NATURAL' : 'COMPANY');
696
- }, [props.onChange, props.readOnly])
697
-
698
- React.useEffect(() => {
699
- setValue(props.value || 'COMPANY')
700
- }, [props.value])
701
-
702
- return (
703
- <Checkbox
704
- disabled={props.readOnly}
705
- checked={value === 'NATURAL'}
706
- onChange={onChange}
707
- >
708
- 是否开票给自然人
709
- </Checkbox>
710
- )
711
- }
712
-
713
- function BuyerNameInput(props: InputProps & { fieldName: string; myform: WrappedFormUtils<any> }) {
714
-
715
- const { fieldName, myform: form } = props;
716
-
717
- const controller = Invoice.useInvoiceController();
718
-
719
- const rootElement = controller.useMemo(s => s.rootElement, []);
720
-
721
- const autoComplete = controller.useMemo(s => s.autoComplete, [])
722
-
723
- const [options, setOptions] = React.useState<any[]>([])
724
-
725
- const onChangeAutoComplete = React.useCallback(value => {
726
- const record = options.filter(e => e[fieldName] === value)[0] as any;
727
- if (!record || !form) return;
728
-
729
- form.setFieldsValue(record);
730
- setOptions([])
731
- }, [options, fieldName, form])
732
-
733
- const onSearch = React.useCallback(async (searchText: string) => {
734
- await Discontinue.start();
735
- try {
736
- if (fieldName === 'buyerName') {
737
- if (autoComplete.onBuyerNameSearch) {
738
- setOptions(await autoComplete.onBuyerNameSearch(searchText));
739
- }
740
- } else if (fieldName === 'buyerTaxId') {
741
- if (autoComplete.onBuyerTaxIdSearch) {
742
- setOptions(await autoComplete.onBuyerTaxIdSearch(searchText));
743
- }
744
- } else if (fieldName === 'supplierName') {
745
- if (autoComplete.onSupplierNameSearch) {
746
- setOptions(await autoComplete.onSupplierNameSearch(searchText));
747
- }
748
- } else if (fieldName === 'supplierTaxId') {
749
- if (autoComplete.onSupplierTaxIdSearch) {
750
- setOptions(await autoComplete.onSupplierTaxIdSearch(searchText));
751
- }
752
- }
753
-
754
- } catch (error) {
755
- setOptions([]);
756
- throw error;
757
- }
758
- }, [autoComplete.onBuyerNameSearch, fieldName])
759
-
760
- if (props.readOnly) return <span className='digtal-stakeholder-form-text'>{props.value}</span>;
761
-
762
- return (
763
- <AutoComplete
764
- onSearch={onSearch}
765
- options={options.map(e => ({ value: e[fieldName] }))}
766
- onChange={onChangeAutoComplete}
767
- value={props.value}
768
- getPopupContainer={() => rootElement || document.body}
769
- style={{ width: '100%' }}
770
- >
771
- <Input {...props} style={{ width: '100%', ...props.style }} />
772
- </AutoComplete>
773
- )
774
- }
775
-
776
- class MyInput extends React.Component<InputProps> {
777
- render() {
778
- const props = this.props;
779
- if (props.readOnly) {
780
- return <span className='digtal-stakeholder-form-text'>{props.value}</span>
781
- } else {
782
- return <Input {...props} />
783
- }
784
- }
785
- }
786
- class CardSelect extends React.Component<any> {
787
-
788
- render() {
789
- const props = this.props;
790
- const option = [
791
-
792
- { label: "居民身份证", value: "201" },
793
- { label: "外国护照", value: "208" },
794
- { label: "港澳居民来往内地通行证", value: "210" },
795
-
796
- { label: "台湾居民来往大陆通行证", value: "213" },
797
-
798
- { label: "中国护照", value: "227" },
799
-
800
- { label: "外国人永久居留身份证", value: "233" },
801
-
802
- { label: "中华人民共和国港澳居民居住证", value: "237" },
803
- { label: "中华人民共和国台湾居民居住证", value: "238" },
804
-
805
- ];
806
- function getLable(value?: string) {
807
-
808
- return option.find(e => e.value === value)?.label || '';
809
-
810
- }
811
- if (props.readOnly) {
812
- return <span className='digtal-stakeholder-form-text'>{getLable(props.value)}</span>
813
- } else {
814
- return <Select style={{ width: 200 }} options={option} {...props} />
815
- }
816
- }
817
- }
818
- class NationalSelect extends React.Component<any> {
819
-
820
- render() {
821
- const props = this.props;
822
- const option = [
823
- { value: "156", label: "中国" },
824
- { value: "344", label: "中国香港" },
825
- { value: "158", label: "中国台湾" },
826
- { value: "446", label: "中国澳门" },
827
-
828
- { value: "004", label: "阿富汗" },
829
- { value: "008", label: "阿尔巴尼亚" },
830
- { value: "010", label: "南极洲" },
831
- { value: "012", label: "阿尔及利亚" },
832
- { value: "016", label: "美属萨摩亚" },
833
- { value: "020", label: "安道尔" },
834
- { value: "024", label: "安哥拉" },
835
- { value: "028", label: "安提瓜和巴布达" },
836
- { value: "031", label: "阿塞拜疆" },
837
- { value: "032", label: "阿根廷" },
838
- { value: "036", label: "澳大利亚" },
839
- { value: "040", label: "奥地利" },
840
- { value: "044", label: "巴哈马" },
841
- { value: "048", label: "巴林" },
842
- { value: "050", label: "孟加拉国" },
843
- { value: "051", label: "亚美尼亚" },
844
- { value: "052", label: "巴巴多斯" },
845
- { value: "056", label: "比利时" },
846
- { value: "060", label: "百慕大" },
847
- { value: "064", label: "不丹" },
848
- { value: "068", label: "玻利维亚" },
849
- { value: "070", label: "波黑" },
850
- { value: "072", label: "博茨瓦纳" },
851
- { value: "074", label: "布维岛" },
852
- { value: "076", label: "巴西" },
853
- { value: "084", label: "伯利兹" },
854
- { value: "086", label: "英属印度洋领地" },
855
- { value: "090", label: "所罗门群岛" },
856
- { value: "092", label: "英属维尔京群岛" },
857
- { value: "096", label: "文莱" },
858
- { value: "100", label: "保加利亚" },
859
- { value: "104", label: "缅甸" },
860
- { value: "108", label: "布隆迪" },
861
- { value: "112", label: "白俄罗斯" },
862
- { value: "116", label: "柬埔寨" },
863
- { value: "120", label: "喀麦隆" },
864
- { value: "124", label: "加拿大" },
865
- { value: "132", label: "佛得角" },
866
- { value: "136", label: "开曼群岛" },
867
- { value: "140", label: "中非" },
868
- { value: "144", label: "斯里兰卡" },
869
- { value: "148", label: "乍得" },
870
- { value: "152", label: "智利" },
871
-
872
- { value: "162", label: "圣诞岛" },
873
- { value: "166", label: "科科斯(基林)群岛" },
874
- { value: "170", label: "哥伦比亚" },
875
- { value: "174", label: "科摩罗" },
876
- { value: "175", label: "马约特" },
877
- { value: "178", label: "刚果(布)" },
878
- { value: "180", label: "刚果(金)" },
879
- { value: "184", label: "库克群岛" },
880
- { value: "188", label: "哥斯达黎加" },
881
- { value: "191", label: "克罗地亚" },
882
- { value: "192", label: "古巴" },
883
- { value: "196", label: "塞浦路斯" },
884
- { value: "203", label: "捷克" },
885
- { value: "204", label: "贝宁" },
886
- { value: "208", label: "丹麦" },
887
- { value: "212", label: "多米尼克" },
888
- { value: "214", label: "多米尼加" },
889
- { value: "218", label: "厄瓜多尔" },
890
- { value: "222", label: "萨尔瓦多" },
891
- { value: "226", label: "赤道几内亚" },
892
- { value: "231", label: "埃塞俄比亚" },
893
- { value: "232", label: "厄立特里亚" },
894
- { value: "233", label: "爱沙尼亚" },
895
- { value: "234", label: "法罗群岛" },
896
- { value: "238", label: "福克兰群岛" },
897
- { value: "239", label: "南乔治亚岛和南桑德韦奇岛" },
898
- { value: "242", label: "斐济" },
899
- { value: "246", label: "芬兰" },
900
- { value: "250", label: "法国" },
901
- { value: "254", label: "法属圭亚那" },
902
- { value: "258", label: "法属波利尼西亚" },
903
- { value: "260", label: "法属南部领地" },
904
- { value: "262", label: "吉布提" },
905
- { value: "266", label: "加蓬" },
906
- { value: "268", label: "格鲁吉亚" },
907
- { value: "270", label: "冈比亚" },
908
- { value: "275", label: "巴勒斯坦" },
909
- { value: "276", label: "德国" },
910
- { value: "288", label: "加纳" },
911
- { value: "292", label: "直布罗陀" },
912
- { value: "296", label: "基里巴斯" },
913
- { value: "300", label: "希腊" },
914
- { value: "304", label: "格陵兰" },
915
- { value: "308", label: "格林纳达" },
916
- { value: "312", label: "瓜德罗普" },
917
- { value: "316", label: "关岛" },
918
- { value: "320", label: "危地马拉" },
919
- { value: "324", label: "几内亚" },
920
- { value: "328", label: "圭亚那" },
921
- { value: "332", label: "海地" },
922
- { value: "334", label: "赫德岛和麦克唐纳岛" },
923
- { value: "336", label: "梵蒂冈" },
924
- { value: "340", label: "洪都拉斯" },
925
-
926
- { value: "348", label: "匈牙利" },
927
- { value: "352", label: "冰岛" },
928
- { value: "356", label: "印度" },
929
- { value: "360", label: "印度尼西亚" },
930
- { value: "364", label: "伊朗" },
931
- { value: "368", label: "伊拉克" },
932
- { value: "372", label: "爱尔兰" },
933
- { value: "376", label: "以色列" },
934
- { value: "380", label: "意大利" },
935
- { value: "384", label: "科特迪瓦" },
936
- { value: "388", label: "牙买加" },
937
- { value: "392", label: "日本" },
938
- { value: "398", label: "哈萨克斯坦" },
939
- { value: "400", label: "约旦" },
940
- { value: "404", label: "肯尼亚" },
941
- { value: "408", label: "朝鲜" },
942
- { value: "410", label: "韩国" },
943
- { value: "414", label: "科威特" },
944
- { value: "417", label: "吉尔吉斯斯坦" },
945
- { value: "418", label: "老挝" },
946
- { value: "422", label: "黎巴嫩" },
947
- { value: "426", label: "莱索托" },
948
- { value: "428", label: "拉脱维亚" },
949
- { value: "430", label: "利比里亚" },
950
- { value: "434", label: "利比亚" },
951
- { value: "438", label: "列支敦士登" },
952
- { value: "440", label: "立陶宛" },
953
- { value: "442", label: "卢森堡" },
954
-
955
- { value: "450", label: "马达加斯加" },
956
- { value: "454", label: "马拉维" },
957
- { value: "458", label: "马来西亚" },
958
- { value: "462", label: "马尔代夫" },
959
- { value: "466", label: "马里" },
960
- { value: "470", label: "马耳他" },
961
- { value: "474", label: "马提尼克" },
962
- { value: "478", label: "毛里塔尼亚" },
963
- { value: "480", label: "毛里求斯" },
964
- { value: "484", label: "墨西哥" },
965
- { value: "492", label: "摩纳哥" },
966
- { value: "496", label: "蒙古" },
967
- { value: "498", label: "摩尔多瓦" },
968
- { value: "499", label: "黑山" },
969
- { value: "500", label: "蒙特塞拉特" },
970
- { value: "504", label: "摩洛哥" },
971
- { value: "508", label: "莫桑比克" },
972
- { value: "512", label: "阿曼" },
973
- { value: "516", label: "纳米比亚" },
974
- { value: "520", label: "瑙鲁" },
975
- { value: "524", label: "尼泊尔" },
976
- { value: "528", label: "荷兰" },
977
- { value: "530", label: "荷属安的列斯" },
978
- { value: "533", label: "阿鲁巴" },
979
- { value: "540", label: "新喀里多尼亚" },
980
- { value: "548", label: "瓦努阿图" },
981
- { value: "554", label: "新西兰" },
982
- { value: "558", label: "尼加拉瓜" },
983
- { value: "562", label: "尼日尔" },
984
- { value: "566", label: "尼日利亚" },
985
- { value: "570", label: "纽埃" },
986
- { value: "574", label: "诺福克岛" },
987
- { value: "578", label: "挪威" },
988
- { value: "580", label: "北马里亚纳" },
989
- { value: "581", label: "美国本土外小岛屿" },
990
- { value: "583", label: "密克罗尼西亚联邦" },
991
- { value: "584", label: "马绍尔群岛" },
992
- { value: "585", label: "帕劳" },
993
- { value: "586", label: "巴基斯坦" },
994
- { value: "591", label: "巴拿马" },
995
- { value: "598", label: "巴布亚新几内亚" },
996
- { value: "600", label: "巴拉圭" },
997
- { value: "604", label: "秘鲁" },
998
- { value: "608", label: "菲律宾" },
999
- { value: "612", label: "皮特凯恩" },
1000
- { value: "616", label: "波兰" },
1001
- { value: "620", label: "葡萄牙" },
1002
- { value: "624", label: "几内亚比绍" },
1003
- { value: "626", label: "东帝汶" },
1004
- { value: "630", label: "波多黎各" },
1005
- { value: "634", label: "卡塔尔" },
1006
- { value: "638", label: "留尼汪" },
1007
- { value: "642", label: "罗马尼亚" },
1008
- { value: "643", label: "俄罗斯联邦" },
1009
- { value: "646", label: "卢旺达" },
1010
- { value: "654", label: "圣赫勒拿" },
1011
- { value: "659", label: "圣基茨和尼维斯" },
1012
- { value: "660", label: "安圭拉" },
1013
- { value: "662", label: "圣卢西亚" },
1014
- { value: "666", label: "圣皮埃尔和密克隆" },
1015
- { value: "670", label: "圣文森特和格林纳丁斯" },
1016
- { value: "674", label: "圣马力诺" },
1017
- { value: "678", label: "圣多美和普林西比" },
1018
- { value: "682", label: "沙特阿拉伯" },
1019
- { value: "686", label: "塞内加尔" },
1020
- { value: "688", label: "塞尔维亚" },
1021
- { value: "690", label: "塞舌尔" },
1022
- { value: "694", label: "塞拉利昂" },
1023
- { value: "702", label: "新加坡" },
1024
- { value: "703", label: "斯洛伐克" },
1025
- { value: "704", label: "越南" },
1026
- { value: "705", label: "斯洛文尼亚" },
1027
- { value: "706", label: "索马里" },
1028
- { value: "710", label: "南非" },
1029
- { value: "716", label: "津巴布韦" },
1030
- { value: "724", label: "西班牙" },
1031
- { value: "728", label: "南苏丹" },
1032
- { value: "732", label: "西撒哈拉" },
1033
- { value: "736", label: "苏丹" },
1034
- { value: "740", label: "苏里南" },
1035
- { value: "744", label: "斯瓦尔巴岛和扬马延岛" },
1036
- { value: "748", label: "斯威士兰" },
1037
- { value: "752", label: "瑞典" },
1038
- { value: "756", label: "瑞士" },
1039
- { value: "760", label: "叙利亚" },
1040
- { value: "762", label: "塔吉克斯坦" },
1041
- { value: "764", label: "泰国" },
1042
- { value: "768", label: "多哥" },
1043
- { value: "772", label: "托克劳" },
1044
- { value: "776", label: "汤加" },
1045
- { value: "780", label: "特立尼达和多巴哥" },
1046
- { value: "784", label: "阿联酋" },
1047
- { value: "788", label: "突尼斯" },
1048
- { value: "792", label: "土耳其" },
1049
- { value: "795", label: "土库曼斯坦" },
1050
- { value: "796", label: "特克斯和凯科斯群岛" },
1051
- { value: "798", label: "图瓦卢" },
1052
- { value: "800", label: "乌干达" },
1053
- { value: "804", label: "乌克兰" },
1054
- { value: "807", label: "前南马其顿" },
1055
- { value: "818", label: "埃及" },
1056
- { value: "826", label: "英国" },
1057
- { value: "831", label: "根西岛" },
1058
- { value: "832", label: "泽西岛" },
1059
- { value: "833", label: "马恩岛" },
1060
- { value: "834", label: "坦桑尼亚" },
1061
- { value: "840", label: "美国" },
1062
- { value: "850", label: "美属维尔京群岛" },
1063
- { value: "854", label: "布基纳法索" },
1064
- { value: "858", label: "乌拉圭" },
1065
- { value: "860", label: "乌兹别克斯坦" },
1066
- { value: "862", label: "委内瑞拉" },
1067
- { value: "876", label: "瓦利斯和富图纳" },
1068
- { value: "882", label: "萨摩亚" },
1069
- { value: "887", label: "也门" },
1070
- { value: "891", label: "南斯拉夫" },
1071
- { value: "894", label: "赞比亚" },
1072
- { value: "A00", label: "科索沃" }
1073
- ];
1074
-
1075
- function getLable(value?: string) {
1076
-
1077
- return option.find(e => e.value === value)?.label || '';
1078
-
1079
- }
1080
- if (props.readOnly) {
1081
- return <span className='digtal-stakeholder-form-text'>{getLable(props.value)}</span>
1082
- } else {
1083
- return <Select style={{ width: 100 }} options={option} {...props} />
1084
- }
1085
- }
1086
- }
1087
- class Discontinue {
1088
-
1089
- private static timer: any;
1090
-
1091
- static start = (interval = 200) => new Promise<void>(resolve => {
1092
- clearTimeout(Discontinue.timer);
1093
- Discontinue.timer = setTimeout(resolve, interval);
1094
- })
1095
- }
1096
-
1
+
2
+ import React, { useCallback } 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, Select, 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 "../../..";
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
+ { required: true, message: `${label}必填` },
29
+ { max: 100, message: `${label}内容超长` },
30
+ { pattern: /^[0-9\s\-\+]+$/g, message: `${label}仅能数字、空格、-、+` }
31
+ ],
32
+ sellerTelPhone: (label: string) => [
33
+
34
+ { max: 100, message: `${label}内容超长` },
35
+ { pattern: /^[0-9\s\-\+]+$/g, message: `${label}仅能数字、空格、-、+` }
36
+ ],
37
+ bankName: (label: string) => [
38
+ { max: 100, message: `${label}内容超长` }
39
+ ],
40
+ bankAccount: (label: string) => [
41
+ { max: 100, message: `${label}内容超长` },
42
+ { pattern: /^([0-9a-zA-Z-\s])*$/g, message: `${label}仅能数字、字母、-、空格` }
43
+ ],
44
+ certificateNumber: (label: string) => [
45
+ { required: true, message: `${label}必填` },
46
+ { max: 30, message: `${label}内容超长` },
47
+ { pattern: /^([a-zA-Z0-9])*$/g, message: `${label}仅能数字、英文` }
48
+ ],
49
+ }
50
+
51
+ const formatCompanyName = (e: any) => {
52
+ const value = e?.target?.value;
53
+ if (value) {
54
+ return value.replace('(', '(').replace(')', ')').replace(' ', '');
55
+ }
56
+ }
57
+
58
+ export interface IStakeholder {
59
+
60
+ /** 是否显示导入按钮 */
61
+ isShowImportButton?: boolean;
62
+
63
+ /** 点击了 */
64
+ onClickImportButton?: (e: InvoiceController) => void
65
+
66
+ /** 查看当前可用授信额度 */
67
+ lineCredit?: React.ReactNode;
68
+
69
+ /** 票种类型 */
70
+ isVatNormal?: boolean;
71
+
72
+ /** 是否可以选择自然人 */
73
+ isNaturalPerson?: boolean;
74
+
75
+ /** 是否显示自然人销售方补充信息 */
76
+ isShowNaturalPersonInfo?: boolean;
77
+
78
+ /** 是否展开 */
79
+ isExpand?: boolean;
80
+
81
+ leqi?: boolean;
82
+
83
+ riskData?: any;
84
+
85
+ invoiceMarkCallback?: (value: any) => void;
86
+ }
87
+
88
+ /** 农产品干系人 */
89
+ export default decorator<IStakeholder, IStakeholder & FormComponentProps>(Form.create())(props => {
90
+
91
+ const { form, isShowImportButton, onClickImportButton, isVatNormal = false, isShowNaturalPersonInfo = true } = props;
92
+
93
+ const [isExpand, setExpand] = React.useState(typeof props.isExpand === 'boolean' ? props.isExpand : true);
94
+
95
+ const { getFieldDecorator } = form;
96
+
97
+ const controller = Invoice.useInvoiceController();
98
+
99
+ const model = controller.useMemo(s => s.model, []);
100
+
101
+ const disableds = controller.useMemo(s => s.stakeholder.disableds || [], []);
102
+
103
+ const rulesMap = controller.useMemo(s => s.stakeholder.rulesMap || {}, []);
104
+ const [validateStatus, setStatus] = React.useState<any>('');
105
+ const [errorInfo, setInfo] = React.useState('');
106
+ const [nation, setNationStatue] = React.useState<any>('');
107
+ const [nationInfo, setNation] = React.useState('');
108
+ /** 乐企 */
109
+ const leqispanW = React.useMemo(() => {
110
+ if (props.leqi) {
111
+ return 0;
112
+ } else {
113
+ return 2;
114
+ }
115
+ }, [props.leqi, props.riskData]);
116
+ /** 直连 */
117
+ const riskspanW = React.useMemo(() => {
118
+ if (props.riskData?.code === 'success') {
119
+ return 0;
120
+ } else {
121
+ return 2;
122
+ }
123
+ }, [props.leqi, props.riskData]);
124
+
125
+ const readOnly = React.useMemo(() => {
126
+ if (model === 'readOnly') return true;
127
+ if (model === 'prefab') return true;
128
+ return false;
129
+ }, [model]);
130
+
131
+ const onExpand = React.useCallback(() => { setExpand(e => !e) }, []);
132
+
133
+ const isReadOnly = React.useCallback(field => readOnly || disableds.indexOf(field) >= 0, [disableds, readOnly]);
134
+
135
+ const getRules = React.useCallback((field, defaultRules) => {
136
+ if (isReadOnly(field)) return [];
137
+ return rulesMap[field] || defaultRules;
138
+ }, [rulesMap, isReadOnly, isReadOnly]);
139
+
140
+ controller.useForm('stakeholder', form);
141
+
142
+ // props.isExpand 变化的时候更新
143
+ React.useEffect(() => {
144
+ setExpand(typeof props.isExpand === 'boolean' ? props.isExpand : true);
145
+ }, [props.isExpand])
146
+ const onChangeType = useCallback(
147
+ (value: string) => {
148
+ const supplierTaxId = form?.getFieldValue("supplierTaxId");
149
+ const certificateNumber = form?.getFieldValue("certificateNumber");
150
+ const nationality = form?.getFieldValue("nationality");
151
+ if (value === "201") {
152
+ // 当“自然人证件类型”选择“201:居民身份证”时,校验是否为“156:中国’
153
+ form?.setFieldsValue({ nationality: "156" });
154
+ setNationStatue('');
155
+ setNation('');
156
+ if (supplierTaxId !== certificateNumber) {
157
+ setStatus('error');
158
+ setInfo('证件号码应与销方税号保持一致')
159
+ }
160
+ } else if (value === "210") {
161
+ if (value.startsWith("M")) {
162
+ //如果“证件号码”以M开头,"国籍(或地区头,)”必须为“446:中国澳门”;校验证件号码必须以H或M开头
163
+ if (nationality !== '446') {
164
+ setNationStatue('error');
165
+ setNation('请选择正确的国籍');
166
+ } else {
167
+ setNationStatue('');
168
+ setNation('');
169
+ }
170
+
171
+ } else if (value.startsWith("H")) {
172
+ //如果“证件号码”以H开国籍(或地区)”必须为“344:中国香港”;
173
+ if (nationality !== '344') {
174
+ setNationStatue('error');
175
+ setNation('请选择正确的国籍');
176
+ } else {
177
+ setNationStatue('');
178
+ setNation('');
179
+ }
180
+
181
+ } else {
182
+ setStatus('error');
183
+ setInfo('请输入正确的证件号码')
184
+ }
185
+ } else if (value === "237") {
186
+ if (value.startsWith("810000")) {
187
+ if (nationality !== '344') {
188
+ setNationStatue('error');
189
+ setNation('请选择正确的国籍');
190
+ } else {
191
+ setNationStatue('');
192
+ setNation('');
193
+ }
194
+
195
+ } else if (value.startsWith("820000")) {
196
+ if (nationality !== '446') {
197
+ setNationStatue('error');
198
+ setNation('请选择正确的国籍');
199
+ } else {
200
+ setNationStatue('');
201
+ setNation('');
202
+ }
203
+
204
+
205
+ } else {
206
+ setStatus('error');
207
+ setInfo('请输入正确的证件号码')
208
+ return Promise.reject("请输入正确的证件号码");
209
+ }
210
+ } else if (value === "227") {
211
+
212
+ // 当“自然人证件类型”选择“227:中华人民共和国护照”时,校验是否为“156:中国
213
+ form?.setFieldsValue({ nationality: "156" });
214
+
215
+ } else if (value === "213" || value === "238") {
216
+ // 当“自然人证件类型”选择“213:台湾居民来往大陆通行证”时,校验是否为”158:中国台湾”
217
+ // 当“自然人证件类型”选择“238:中华人民共和国台湾居民居住证”时,校验是否为“ 158:中国台湾”
218
+ form?.setFieldsValue({ nationality: "158" });
219
+ }
220
+ },
221
+ [form]
222
+ );
223
+ /** 校验证件号码*/
224
+ const validateIDCode = useCallback(
225
+ (_: any, value: string) => {
226
+ if (!value) {
227
+ setStatus('error');
228
+ setInfo('请输入正确的证件号码')
229
+ return Promise.resolve();
230
+ }
231
+
232
+ const idtype = form?.getFieldValue("certificateType");
233
+ const nationality = form?.getFieldValue("nationality");
234
+ if (idtype === "210") {
235
+ // 当“自然人证件类型”选择“210:港澳居民来往内地通行证”时,
236
+
237
+
238
+ if (value.startsWith("M")) {
239
+ //如果“证件号码”以M开头,"国籍(或地区头,)”必须为“446:中国澳门”;校验证件号码必须以H或M开头
240
+ if (nationality !== '446') {
241
+ setNationStatue('error');
242
+ setNation('请选择正确的国籍');
243
+ } else {
244
+ setNationStatue('');
245
+ setNation('');
246
+ }
247
+
248
+ } else if (value.startsWith("H")) {
249
+ //如果“证件号码”以H开国籍(或地区)”必须为“344:中国香港”;
250
+ if (nationality !== '344') {
251
+ setNationStatue('error');
252
+ setNation('请选择正确的国籍');
253
+ } else {
254
+ setNationStatue('');
255
+ setNation('');
256
+ }
257
+
258
+ } else {
259
+ setStatus('error');
260
+ setInfo('请输入正确的证件号码')
261
+ return Promise.reject("请输入正确的证件号码");
262
+ }
263
+ } else if (idtype === "237") {
264
+ //当“自然人证件类型”选择“237:中华人民共和国港澳居民居住证”时,校验证件号码必须以810000或820000开头,如果“证件号码”以810000开头,必须为“344:中国香国籍(或地区))港”;如果“证件号码”以820000开头,国籍(或地区)必须为“446:中国澳门”
265
+ if (value.startsWith("810000")) {
266
+ if (nationality !== '344') {
267
+ setNationStatue('error');
268
+ setNation('请选择正确的国籍');
269
+ } else {
270
+ setNationStatue('');
271
+ setNation('');
272
+ }
273
+
274
+ } else if (value.startsWith("820000")) {
275
+ if (nationality !== '446') {
276
+ setNationStatue('error');
277
+ setNation('请选择正确的国籍');
278
+ } else {
279
+ setNationStatue('');
280
+ setNation('');
281
+ }
282
+
283
+
284
+ } else {
285
+ setStatus('error');
286
+ setInfo('请输入正确的证件号码')
287
+ return Promise.reject("请输入正确的证件号码");
288
+ }
289
+ }
290
+ // 当“销售方自然人证件类型”填写“201:居民身份证”,“销售方纳税人识别号”必须与“销售方自然人证件号码”完全一致
291
+ if (idtype === "201") {
292
+ const supplierTaxId = form?.getFieldValue("supplierTaxId");
293
+ if (value !== supplierTaxId) {
294
+ setStatus('error');
295
+ setInfo('证件号码应与销方税号保持一致')
296
+ return Promise.reject("证件号码应与销方税号保持一致");
297
+ } else if (value === supplierTaxId) {
298
+ setStatus('');
299
+ setInfo('')
300
+ }
301
+ }
302
+ setStatus('');
303
+ setInfo('')
304
+ return Promise.resolve();
305
+ },
306
+ [form]
307
+ );
308
+ const validateIDCode2 = useCallback(
309
+ (e: any) => {
310
+ const value = e.target.value;
311
+ // if (!value) {
312
+ // setStatus('');
313
+ // setInfo('')
314
+ // }
315
+
316
+ const idtype = form?.getFieldValue("certificateType");
317
+
318
+ // // 当“销售方自然人证件类型”填写“201:居民身份证”,“销售方纳税人识别号”必须与“销售方自然人证件号码”完全一致
319
+ if (idtype === "201") {
320
+ const certificateNumber = form?.getFieldValue("certificateNumber");
321
+ console.log(value, certificateNumber)
322
+ if (value !== certificateNumber) {
323
+ setStatus('error');
324
+ setInfo('证件号码应与销方税号保持一致')
325
+ } else {
326
+ setStatus('');
327
+ setInfo('')
328
+ }
329
+ }
330
+ },
331
+ [form]
332
+ );
333
+ const validateNationality = useCallback(
334
+ (_: any, value: string) => {
335
+ if (!value) {
336
+ setNationStatue('error');
337
+ setNation('请选择正确的国籍');
338
+ return Promise.resolve();
339
+ }
340
+ const idtype = form?.getFieldValue("certificateType");
341
+ const idcode = form?.getFieldValue("certificateNumber");
342
+ console.log(value, idtype, idcode)
343
+ if (idtype === "201" || idtype === "227") {
344
+ // 当“自然人证件类型”选择“201:居民身份证”时,校验是否为“156:中国’
345
+ // 当“自然人证件类型”选择“227:中华人民共和国护照”时,校验是否为“156:中国
346
+ if (value !== "156") {
347
+ setNationStatue('error');
348
+ setNation('请选择正确的国籍');
349
+ return Promise.reject("请选择正确的国籍");
350
+ }
351
+ } else if (idtype === "213" || idtype === "238") {
352
+ // 当“自然人证件类型”选择“213:台湾居民来往大陆通行证”时,校验是否为”158:中国台湾”
353
+ // 当“自然人证件类型”选择“238:中华人民共和国台湾居民居住证”时,校验是否为“ 158:中国台湾”
354
+ if (value !== "158") {
355
+ setNationStatue('error');
356
+ setNation('请选择正确的国籍');
357
+ return Promise.reject("请选择正确的国籍");
358
+ }
359
+ } else if (idtype === "210") {
360
+ //当“自然人证件类型”选择“210:港澳居民来往内地通行证”时,如果“证件号码”以H开国籍(或地区)”必须为“344:中国香港”;如果“证件号码”以M开头,"国籍(或地区头,)”必须为“446:中国澳门”;
361
+ let r = false;
362
+ if (idcode) {
363
+ if (idcode.startsWith("M") && value === "446") {
364
+ r = true;
365
+ } else if (idcode.startsWith("H") && value === "344") {
366
+ r = true;
367
+ }
368
+ } else if (value === "344" || value === "446") {
369
+ r = true;
370
+ }
371
+ if (!r) {
372
+ setNationStatue('error');
373
+ setNation('请选择正确的国籍');
374
+ return Promise.reject("请选择正确的国籍");
375
+ }
376
+ } else if (idtype === "237") {
377
+ //当“自然人证件类型”选择“237:中华人民共和国港澳居民居住证”时,校验证件号码必须以810000或820000开头,如果“证件号码”以810000开头,必须为“344:中国香国籍(或地区))港”;如果“证件号码”以820000开头,国籍(或地区)必须为“446:中国澳门”
378
+ let r = false;
379
+ if (idcode) {
380
+ if (idcode.startsWith("820000") && value === "446") {
381
+ r = true;
382
+ } else if (idcode.startsWith("810000") && value === "344") {
383
+ r = true;
384
+ }
385
+ } else if (value === "344" || value === "446") {
386
+ r = true;
387
+ }
388
+ if (!r) {
389
+ setNationStatue('error');
390
+ setNation('请选择正确的国籍');
391
+ return Promise.reject("请选择正确的国籍");
392
+ }
393
+ }
394
+ setNationStatue('');
395
+ setNation('');
396
+ return Promise.resolve();
397
+ },
398
+ [form]
399
+ );
400
+ return (
401
+ <>
402
+ <div className={classNames("kts-invoice-operate-invoice-digtal-stakeholder", { readOnly: readOnly })} >
403
+ <div>
404
+ {'销售方信息'.split('').map(e => <span>{e}</span>)}
405
+ {
406
+ !readOnly &&
407
+ <Icon
408
+ className="digtal-stakeholder-expand-button"
409
+ component={isExpand ? ArrowUpSvg : ArrowDownSvg}
410
+ onClick={onExpand}
411
+ />
412
+ }
413
+ </div>
414
+ <div>
415
+ <div style={{ marginTop: 20 }} className='natural-person-flag' >
416
+ {
417
+ props.isNaturalPerson === true &&
418
+ <Form.Item colon={false}>
419
+ {getFieldDecorator('naturalPersonFlag', {
420
+ })(
421
+ <NaturalPersonFlag readOnly={isReadOnly('naturalPersonFlag')} />
422
+ )}
423
+ </Form.Item>
424
+ }
425
+ </div>
426
+ <Form className="digtal-stakeholder-form" >
427
+ <Row gutter={[16, 0]}>
428
+ <Col span={24} >
429
+ <Form.Item label='名称' colon={false}>
430
+ {getFieldDecorator('supplierName', {
431
+ rules: getRules('supplierName', RULES.companyName('销售方名称')),
432
+ // getValueFromEvent: formatCompanyName
433
+ })
434
+ // (<MyInput readOnly={isReadOnly('supplierName')} placeholder="请输入名称" autoComplete="off" />)
435
+ (
436
+ <BuyerNameInput
437
+ myform={form}
438
+ fieldName='supplierName'
439
+ readOnly={isReadOnly('supplierName')}
440
+ placeholder="请输入名称"
441
+ autoComplete="off"
442
+ suffix={
443
+ isShowImportButton === true &&
444
+ <Button
445
+ type='link'
446
+ style={{ padding: 0, width: 20, height: '100%' }}
447
+ icon={<Icon component={PlusSvg} />}
448
+ onClick={() => { onClickImportButton && onClickImportButton(controller) }}
449
+ />
450
+ }
451
+ />
452
+ )
453
+ }
454
+ </Form.Item>
455
+ </Col>
456
+
457
+ <Col span={24} >
458
+ <Form.Item label='统一社会信用代码/纳税人识别号' colon={false}>
459
+ {getFieldDecorator('supplierTaxId', {
460
+ rules: getRules('supplierTaxId', [{ required: true, message: '销售方纳税人识别号必填' }, ...RULES.taxId('销售方纳税人识别号')])
461
+ })
462
+ // (<MyInput readOnly={isReadOnly('supplierTaxId')} placeholder="请输入统一社会信用代码/纳税人识别号" autoComplete="off" />)
463
+ (<BuyerNameInput
464
+ onChange={validateIDCode2}
465
+ myform={form}
466
+ fieldName='supplierTaxId'
467
+ readOnly={isReadOnly('supplierTaxId')}
468
+ placeholder="请输入统一社会信用代码/纳税人识别号"
469
+ autoComplete="off"
470
+ />)
471
+ }
472
+ </Form.Item>
473
+ </Col>
474
+
475
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
476
+ <Form.Item label='销售方地址' colon={false}>
477
+ {getFieldDecorator('sellerAddress', {
478
+ rules: getRules('sellerAddress', [{ max: 300, message: '销售方地址内容超长' }])
479
+ })(<MyInput readOnly={isReadOnly('sellerAddress')} placeholder="请输入销售方地址" autoComplete="off" />)}
480
+ </Form.Item>
481
+ </Col>
482
+
483
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
484
+ <Form.Item label='电话' colon={false} className='telephone' >
485
+ {getFieldDecorator('sellerPhone', {
486
+ rules: getRules('sellerPhone', RULES.sellerTelPhone('销售方电话'))
487
+ })(<MyInput readOnly={isReadOnly('sellerPhone')} placeholder="请输入电话" autoComplete="off" />)}
488
+ </Form.Item>
489
+ </Col>
490
+
491
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
492
+ <Form.Item label='销售方开户银行' colon={false}>
493
+ {getFieldDecorator('sellerBank', {
494
+ rules: getRules('sellerBank', RULES.bankName('销售方开户银行'))
495
+ })(<MyInput readOnly={isReadOnly('sellerBank')} placeholder="请输入销售方开户银行" autoComplete="off" />)}
496
+ </Form.Item>
497
+ </Col>
498
+ {(props.leqi) &&
499
+ <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
500
+ <Form.Item colon={false}>
501
+ {getFieldDecorator('sellerAddressPhoneFlag', {
502
+ valuePropName: 'checked',
503
+ })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('sellerAddressPhoneFlag')} style={{ whiteSpace: 'nowrap' }}>是否展示</Checkbox>)}
504
+ </Form.Item>
505
+ </Col>
506
+ }
507
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
508
+ <Form.Item label='银行账号' colon={false}>
509
+ {getFieldDecorator('sellerAccount', {
510
+ rules: getRules('sellerAccount', RULES.bankAccount('销售方银行账号'))
511
+ })(<MyInput readOnly={isReadOnly('sellerAccount')} placeholder="请输入银行账号" autoComplete="off" />)}
512
+ </Form.Item>
513
+ </Col>
514
+ {(props.leqi || props.riskData?.code === 'success') &&
515
+ <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
516
+ <Form.Item colon={false}>
517
+ {getFieldDecorator('sellerBankAccountFlag', {
518
+ valuePropName: 'checked',
519
+ })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('sellerBankAccountFlag')} style={{ whiteSpace: 'nowrap' }}>是否展示</Checkbox>)}
520
+ </Form.Item>
521
+ </Col>
522
+ }
523
+ </Row>
524
+ </Form>
525
+ </div>
526
+ <div>
527
+ {'购买方信息'.split('').map(e => <span>{e}</span>)}
528
+ {
529
+ !readOnly &&
530
+ <Icon
531
+ className="digtal-stakeholder-expand-button"
532
+ component={isExpand ? ArrowUpSvg : ArrowDownSvg}
533
+ onClick={onExpand}
534
+ />
535
+ }
536
+ </div>
537
+ <div>
538
+ {
539
+ !readOnly && props.lineCredit &&
540
+ <div style={{ marginTop: 20 }} >
541
+ <Tooltip trigger="click" title={props.lineCredit} >
542
+ <Button type="link" style={{ padding: `0px 8px` }} >查看当前可用授信额度</Button>
543
+ </Tooltip>
544
+ </div>
545
+ }
546
+
547
+ <Form className="digtal-stakeholder-form" >
548
+ <Row gutter={[16, 0]}>
549
+ <Col span={24} >
550
+ <Form.Item label='名称' colon={false}>
551
+ {getFieldDecorator('buyerName', {
552
+ rules: getRules('buyerName', RULES.companyName('购买方名称')),
553
+ })(
554
+ <BuyerNameInput
555
+ myform={form}
556
+ fieldName='buyerName'
557
+ readOnly={isReadOnly('buyerName')}
558
+ placeholder="请输入名称"
559
+ autoComplete="off"
560
+ suffix={
561
+ isShowImportButton === true &&
562
+ <Button
563
+ type='link'
564
+ style={{ padding: 0, width: 20, height: '100%' }}
565
+ icon={<Icon component={PlusSvg} />}
566
+ onClick={() => { onClickImportButton && onClickImportButton(controller) }}
567
+ />
568
+ }
569
+ />
570
+ )}
571
+ </Form.Item>
572
+ </Col>
573
+
574
+ <Col span={24} >
575
+ <Form.Item label='统一社会信用代码/纳税人识别号' colon={false}>
576
+ {getFieldDecorator('buyerTaxId', {
577
+ rules: getRules('buyerTaxId', [{ required: !isVatNormal, message: '购买方纳税人识别号必填' }, ...RULES.taxId('购买方纳税人识别号')])
578
+ })(
579
+ <BuyerNameInput
580
+ myform={form}
581
+ fieldName='buyerTaxId'
582
+ readOnly={isReadOnly('buyerTaxId')}
583
+ placeholder="请输入统一社会信用代码/纳税人识别号"
584
+ autoComplete="off"
585
+ />
586
+ )}
587
+ </Form.Item>
588
+ </Col>
589
+
590
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
591
+ <Form.Item label='购买方地址' colon={false}>
592
+ {getFieldDecorator('buyerAddress', {
593
+ rules: getRules('buyerAddress', [{ max: 100, message: '购买方地址内容超长' }])
594
+ })(<MyInput readOnly={isReadOnly('buyerAddress')} placeholder="请输入购买方地址" autoComplete="off" />)}
595
+ </Form.Item>
596
+ </Col>
597
+
598
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
599
+ <Form.Item label='电话' colon={false} className='telephone'>
600
+ {getFieldDecorator('buyerPhone', {
601
+ rules: getRules('buyerPhone', RULES.buyerTelPhone('购买方电话'))
602
+ })(<MyInput readOnly={isReadOnly('buyerPhone')} placeholder="请输入电话" autoComplete="off" />)}
603
+ </Form.Item>
604
+ </Col>
605
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
606
+ <Form.Item label='购买方开户银行' colon={false}>
607
+ {getFieldDecorator('buyerBank', {
608
+ rules: getRules('buyerBank', RULES.bankName('购买方开户银行'))
609
+ })(<MyInput readOnly={isReadOnly('buyerBank')} placeholder="请输入购买方开户银行" autoComplete="off" />)}
610
+ </Form.Item>
611
+ </Col>
612
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
613
+ <Form.Item label='购买方开户银行' colon={false}>
614
+ {getFieldDecorator('buyerBank', {
615
+ rules: getRules('buyerBank', RULES.bankName('购买方开户银行'))
616
+ })(<MyInput readOnly={isReadOnly('buyerBank')} placeholder="请输入购买方开户银行" autoComplete="off" />)}
617
+ </Form.Item>
618
+ </Col>
619
+
620
+ <Col span={10 + leqispanW} style={{ display: isExpand ? undefined : 'none' }} >
621
+ <Form.Item label='银行账号' colon={false}>
622
+ {getFieldDecorator('buyerAccount', {
623
+ rules: getRules('buyerAccount', RULES.bankAccount('购买方银行账号'))
624
+ })(<MyInput readOnly={isReadOnly('buyerAccount')} placeholder="请输入银行账号" autoComplete="off" />)}
625
+ </Form.Item>
626
+ </Col>
627
+ {(props.leqi || props.riskData?.code === 'success') &&
628
+ <Col span={4} style={{ display: isExpand ? undefined : 'none' }}>
629
+ <Form.Item colon={false}>
630
+ {getFieldDecorator('buyerBankAccountFlag', {
631
+ valuePropName: 'checked',
632
+ })(<Checkbox onChange={props?.invoiceMarkCallback} disabled={isReadOnly('buyerBankAccountFlag')} style={{ whiteSpace: 'nowrap' }}>是否展示</Checkbox>)}
633
+ </Form.Item>
634
+ </Col>
635
+ }
636
+ </Row>
637
+ </Form>
638
+ </div>
639
+
640
+ </div>
641
+
642
+ {
643
+ isShowNaturalPersonInfo &&
644
+ <div className='kts-invoice-operate-invoice-digtal-payinfo'>
645
+ <Form className="digtal-stakeholder-form" style={{ width: '100%' }}>
646
+ <Row gutter={[16, 0]}>
647
+ <Col span={5} >
648
+ <Form.Item label='自然人销售方补充信息' colon={false} >
649
+
650
+ </Form.Item>
651
+ </Col>
652
+ {/* <label>自然人销售方补充信息</label> */}
653
+ <Col span={6} >
654
+ <Form.Item label='证件类型' colon={false} >
655
+ {getFieldDecorator('certificateType', {
656
+ rules: [{ required: true, message: '数据必填' }]
657
+ })(<CardSelect onChange={onChangeType} readOnly={isReadOnly('certificateType')} placeholder="数据必填" autoComplete="off" />)}
658
+ </Form.Item>
659
+ </Col>
660
+ <Col span={7} >
661
+ <Form.Item label='证件号码' colon={false} validateStatus={validateStatus} help={errorInfo}>
662
+ {getFieldDecorator('certificateNumber', {
663
+ rules: [{ required: true, message: '数据必填' }, { max: 30, message: `内容超长` }, { validator: validateIDCode },]
664
+ })(<MyInput readOnly={isReadOnly('certificateNumber')} placeholder="数据必填" autoComplete="off" />)}
665
+ </Form.Item>
666
+ </Col>
667
+ <Col span={6} >
668
+ <Form.Item label='国籍(或地区)' colon={false} validateStatus={nation} help={nationInfo}>
669
+ {getFieldDecorator('nationality', {
670
+ rules: [{ required: true, message: '数据必填' }, { validator: validateNationality }]
671
+ })(<NationalSelect showSearch={true}
672
+ optionFilterProp="children"
673
+ filterOption={(input: any, option: any) => {
674
+ if (option) {
675
+ return option.label?.indexOf(input) >= 0;
676
+ }
677
+ return false;
678
+ }} readOnly={isReadOnly('nationality')} placeholder="数据必填" autoComplete="off" />)}
679
+ </Form.Item>
680
+ </Col>
681
+ </Row>
682
+ </Form>
683
+ </div>
684
+ }
685
+ </>
686
+ )
687
+ })
688
+
689
+ function NaturalPersonFlag(props: {
690
+ // NATURAL("自然人"), COMPANY("非自然人");
691
+ value?: 'COMPANY' | 'NATURAL',
692
+ onChange?: (e: 'COMPANY' | 'NATURAL') => void
693
+ readOnly?: boolean;
694
+ }) {
695
+
696
+ const [value, setValue] = React.useState(props.value || 'COMPANY');
697
+
698
+ const onChange = React.useCallback((e: CheckboxChangeEvent) => {
699
+ if (props.readOnly) return;
700
+ setValue(e.target.checked ? 'NATURAL' : 'COMPANY');
701
+ props.onChange && props.onChange(e.target.checked ? 'NATURAL' : 'COMPANY');
702
+ }, [props.onChange, props.readOnly])
703
+
704
+ React.useEffect(() => {
705
+ setValue(props.value || 'COMPANY')
706
+ }, [props.value])
707
+
708
+ return (
709
+ <Checkbox
710
+ disabled={props.readOnly}
711
+ checked={value === 'NATURAL'}
712
+ onChange={onChange}
713
+ >
714
+ 是否开票给自然人
715
+ </Checkbox>
716
+ )
717
+ }
718
+
719
+ function BuyerNameInput(props: InputProps & { fieldName: string; myform: WrappedFormUtils<any> }) {
720
+
721
+ const { fieldName, myform: form } = props;
722
+
723
+ const controller = Invoice.useInvoiceController();
724
+
725
+ const rootElement = controller.useMemo(s => s.rootElement, []);
726
+
727
+ const autoComplete = controller.useMemo(s => s.autoComplete, [])
728
+
729
+ const [options, setOptions] = React.useState<any[]>([])
730
+
731
+ const onChangeAutoComplete = React.useCallback(value => {
732
+ const record = options.filter(e => e[fieldName] === value)[0] as any;
733
+ if (!record || !form) return;
734
+
735
+ form.setFieldsValue(record);
736
+ setOptions([])
737
+ }, [options, fieldName, form])
738
+
739
+ const onSearch = React.useCallback(async (searchText: string) => {
740
+ await Discontinue.start();
741
+ try {
742
+ if (fieldName === 'buyerName') {
743
+ if (autoComplete.onBuyerNameSearch) {
744
+ setOptions(await autoComplete.onBuyerNameSearch(searchText));
745
+ }
746
+ } else if (fieldName === 'buyerTaxId') {
747
+ if (autoComplete.onBuyerTaxIdSearch) {
748
+ setOptions(await autoComplete.onBuyerTaxIdSearch(searchText));
749
+ }
750
+ } else if (fieldName === 'supplierName') {
751
+ if (autoComplete.onSupplierNameSearch) {
752
+ setOptions(await autoComplete.onSupplierNameSearch(searchText));
753
+ }
754
+ } else if (fieldName === 'supplierTaxId') {
755
+ if (autoComplete.onSupplierTaxIdSearch) {
756
+ setOptions(await autoComplete.onSupplierTaxIdSearch(searchText));
757
+ }
758
+ }
759
+
760
+ } catch (error) {
761
+ setOptions([]);
762
+ throw error;
763
+ }
764
+ }, [autoComplete.onBuyerNameSearch, fieldName])
765
+
766
+ if (props.readOnly) return <span className='digtal-stakeholder-form-text'>{props.value}</span>;
767
+
768
+ return (
769
+ <AutoComplete
770
+ onSearch={onSearch}
771
+ options={options.map(e => ({ value: e[fieldName] }))}
772
+ onChange={onChangeAutoComplete}
773
+ value={props.value}
774
+ getPopupContainer={() => rootElement || document.body}
775
+ style={{ width: '100%' }}
776
+ >
777
+ <Input {...props} style={{ width: '100%', ...props.style }} />
778
+ </AutoComplete>
779
+ )
780
+ }
781
+
782
+ class MyInput extends React.Component<InputProps> {
783
+ render() {
784
+ const props = this.props;
785
+ if (props.readOnly) {
786
+ return <span className='digtal-stakeholder-form-text'>{props.value}</span>
787
+ } else {
788
+ return <Input {...props} />
789
+ }
790
+ }
791
+ }
792
+ class CardSelect extends React.Component<any> {
793
+
794
+ render() {
795
+ const props = this.props;
796
+ const option = [
797
+
798
+ { label: "居民身份证", value: "201" },
799
+ { label: "外国护照", value: "208" },
800
+ { label: "港澳居民来往内地通行证", value: "210" },
801
+
802
+ { label: "台湾居民来往大陆通行证", value: "213" },
803
+
804
+ { label: "中国护照", value: "227" },
805
+
806
+ { label: "外国人永久居留身份证", value: "233" },
807
+
808
+ { label: "中华人民共和国港澳居民居住证", value: "237" },
809
+ { label: "中华人民共和国台湾居民居住证", value: "238" },
810
+
811
+ ];
812
+ function getLable(value?: string) {
813
+
814
+ return option.find(e => e.value === value)?.label || '';
815
+
816
+ }
817
+ if (props.readOnly) {
818
+ return <span className='digtal-stakeholder-form-text'>{getLable(props.value)}</span>
819
+ } else {
820
+ return <Select style={{ width: 200 }} options={option} {...props} />
821
+ }
822
+ }
823
+ }
824
+ class NationalSelect extends React.Component<any> {
825
+
826
+ render() {
827
+ const props = this.props;
828
+ const option = [
829
+ { value: "156", label: "中国" },
830
+ { value: "344", label: "中国香港" },
831
+ { value: "158", label: "中国台湾" },
832
+ { value: "446", label: "中国澳门" },
833
+
834
+ { value: "004", label: "阿富汗" },
835
+ { value: "008", label: "阿尔巴尼亚" },
836
+ { value: "010", label: "南极洲" },
837
+ { value: "012", label: "阿尔及利亚" },
838
+ { value: "016", label: "美属萨摩亚" },
839
+ { value: "020", label: "安道尔" },
840
+ { value: "024", label: "安哥拉" },
841
+ { value: "028", label: "安提瓜和巴布达" },
842
+ { value: "031", label: "阿塞拜疆" },
843
+ { value: "032", label: "阿根廷" },
844
+ { value: "036", label: "澳大利亚" },
845
+ { value: "040", label: "奥地利" },
846
+ { value: "044", label: "巴哈马" },
847
+ { value: "048", label: "巴林" },
848
+ { value: "050", label: "孟加拉国" },
849
+ { value: "051", label: "亚美尼亚" },
850
+ { value: "052", label: "巴巴多斯" },
851
+ { value: "056", label: "比利时" },
852
+ { value: "060", label: "百慕大" },
853
+ { value: "064", label: "不丹" },
854
+ { value: "068", label: "玻利维亚" },
855
+ { value: "070", label: "波黑" },
856
+ { value: "072", label: "博茨瓦纳" },
857
+ { value: "074", label: "布维岛" },
858
+ { value: "076", label: "巴西" },
859
+ { value: "084", label: "伯利兹" },
860
+ { value: "086", label: "英属印度洋领地" },
861
+ { value: "090", label: "所罗门群岛" },
862
+ { value: "092", label: "英属维尔京群岛" },
863
+ { value: "096", label: "文莱" },
864
+ { value: "100", label: "保加利亚" },
865
+ { value: "104", label: "缅甸" },
866
+ { value: "108", label: "布隆迪" },
867
+ { value: "112", label: "白俄罗斯" },
868
+ { value: "116", label: "柬埔寨" },
869
+ { value: "120", label: "喀麦隆" },
870
+ { value: "124", label: "加拿大" },
871
+ { value: "132", label: "佛得角" },
872
+ { value: "136", label: "开曼群岛" },
873
+ { value: "140", label: "中非" },
874
+ { value: "144", label: "斯里兰卡" },
875
+ { value: "148", label: "乍得" },
876
+ { value: "152", label: "智利" },
877
+
878
+ { value: "162", label: "圣诞岛" },
879
+ { value: "166", label: "科科斯(基林)群岛" },
880
+ { value: "170", label: "哥伦比亚" },
881
+ { value: "174", label: "科摩罗" },
882
+ { value: "175", label: "马约特" },
883
+ { value: "178", label: "刚果(布)" },
884
+ { value: "180", label: "刚果(金)" },
885
+ { value: "184", label: "库克群岛" },
886
+ { value: "188", label: "哥斯达黎加" },
887
+ { value: "191", label: "克罗地亚" },
888
+ { value: "192", label: "古巴" },
889
+ { value: "196", label: "塞浦路斯" },
890
+ { value: "203", label: "捷克" },
891
+ { value: "204", label: "贝宁" },
892
+ { value: "208", label: "丹麦" },
893
+ { value: "212", label: "多米尼克" },
894
+ { value: "214", label: "多米尼加" },
895
+ { value: "218", label: "厄瓜多尔" },
896
+ { value: "222", label: "萨尔瓦多" },
897
+ { value: "226", label: "赤道几内亚" },
898
+ { value: "231", label: "埃塞俄比亚" },
899
+ { value: "232", label: "厄立特里亚" },
900
+ { value: "233", label: "爱沙尼亚" },
901
+ { value: "234", label: "法罗群岛" },
902
+ { value: "238", label: "福克兰群岛" },
903
+ { value: "239", label: "南乔治亚岛和南桑德韦奇岛" },
904
+ { value: "242", label: "斐济" },
905
+ { value: "246", label: "芬兰" },
906
+ { value: "250", label: "法国" },
907
+ { value: "254", label: "法属圭亚那" },
908
+ { value: "258", label: "法属波利尼西亚" },
909
+ { value: "260", label: "法属南部领地" },
910
+ { value: "262", label: "吉布提" },
911
+ { value: "266", label: "加蓬" },
912
+ { value: "268", label: "格鲁吉亚" },
913
+ { value: "270", label: "冈比亚" },
914
+ { value: "275", label: "巴勒斯坦" },
915
+ { value: "276", label: "德国" },
916
+ { value: "288", label: "加纳" },
917
+ { value: "292", label: "直布罗陀" },
918
+ { value: "296", label: "基里巴斯" },
919
+ { value: "300", label: "希腊" },
920
+ { value: "304", label: "格陵兰" },
921
+ { value: "308", label: "格林纳达" },
922
+ { value: "312", label: "瓜德罗普" },
923
+ { value: "316", label: "关岛" },
924
+ { value: "320", label: "危地马拉" },
925
+ { value: "324", label: "几内亚" },
926
+ { value: "328", label: "圭亚那" },
927
+ { value: "332", label: "海地" },
928
+ { value: "334", label: "赫德岛和麦克唐纳岛" },
929
+ { value: "336", label: "梵蒂冈" },
930
+ { value: "340", label: "洪都拉斯" },
931
+
932
+ { value: "348", label: "匈牙利" },
933
+ { value: "352", label: "冰岛" },
934
+ { value: "356", label: "印度" },
935
+ { value: "360", label: "印度尼西亚" },
936
+ { value: "364", label: "伊朗" },
937
+ { value: "368", label: "伊拉克" },
938
+ { value: "372", label: "爱尔兰" },
939
+ { value: "376", label: "以色列" },
940
+ { value: "380", label: "意大利" },
941
+ { value: "384", label: "科特迪瓦" },
942
+ { value: "388", label: "牙买加" },
943
+ { value: "392", label: "日本" },
944
+ { value: "398", label: "哈萨克斯坦" },
945
+ { value: "400", label: "约旦" },
946
+ { value: "404", label: "肯尼亚" },
947
+ { value: "408", label: "朝鲜" },
948
+ { value: "410", label: "韩国" },
949
+ { value: "414", label: "科威特" },
950
+ { value: "417", label: "吉尔吉斯斯坦" },
951
+ { value: "418", label: "老挝" },
952
+ { value: "422", label: "黎巴嫩" },
953
+ { value: "426", label: "莱索托" },
954
+ { value: "428", label: "拉脱维亚" },
955
+ { value: "430", label: "利比里亚" },
956
+ { value: "434", label: "利比亚" },
957
+ { value: "438", label: "列支敦士登" },
958
+ { value: "440", label: "立陶宛" },
959
+ { value: "442", label: "卢森堡" },
960
+
961
+ { value: "450", label: "马达加斯加" },
962
+ { value: "454", label: "马拉维" },
963
+ { value: "458", label: "马来西亚" },
964
+ { value: "462", label: "马尔代夫" },
965
+ { value: "466", label: "马里" },
966
+ { value: "470", label: "马耳他" },
967
+ { value: "474", label: "马提尼克" },
968
+ { value: "478", label: "毛里塔尼亚" },
969
+ { value: "480", label: "毛里求斯" },
970
+ { value: "484", label: "墨西哥" },
971
+ { value: "492", label: "摩纳哥" },
972
+ { value: "496", label: "蒙古" },
973
+ { value: "498", label: "摩尔多瓦" },
974
+ { value: "499", label: "黑山" },
975
+ { value: "500", label: "蒙特塞拉特" },
976
+ { value: "504", label: "摩洛哥" },
977
+ { value: "508", label: "莫桑比克" },
978
+ { value: "512", label: "阿曼" },
979
+ { value: "516", label: "纳米比亚" },
980
+ { value: "520", label: "瑙鲁" },
981
+ { value: "524", label: "尼泊尔" },
982
+ { value: "528", label: "荷兰" },
983
+ { value: "530", label: "荷属安的列斯" },
984
+ { value: "533", label: "阿鲁巴" },
985
+ { value: "540", label: "新喀里多尼亚" },
986
+ { value: "548", label: "瓦努阿图" },
987
+ { value: "554", label: "新西兰" },
988
+ { value: "558", label: "尼加拉瓜" },
989
+ { value: "562", label: "尼日尔" },
990
+ { value: "566", label: "尼日利亚" },
991
+ { value: "570", label: "纽埃" },
992
+ { value: "574", label: "诺福克岛" },
993
+ { value: "578", label: "挪威" },
994
+ { value: "580", label: "北马里亚纳" },
995
+ { value: "581", label: "美国本土外小岛屿" },
996
+ { value: "583", label: "密克罗尼西亚联邦" },
997
+ { value: "584", label: "马绍尔群岛" },
998
+ { value: "585", label: "帕劳" },
999
+ { value: "586", label: "巴基斯坦" },
1000
+ { value: "591", label: "巴拿马" },
1001
+ { value: "598", label: "巴布亚新几内亚" },
1002
+ { value: "600", label: "巴拉圭" },
1003
+ { value: "604", label: "秘鲁" },
1004
+ { value: "608", label: "菲律宾" },
1005
+ { value: "612", label: "皮特凯恩" },
1006
+ { value: "616", label: "波兰" },
1007
+ { value: "620", label: "葡萄牙" },
1008
+ { value: "624", label: "几内亚比绍" },
1009
+ { value: "626", label: "东帝汶" },
1010
+ { value: "630", label: "波多黎各" },
1011
+ { value: "634", label: "卡塔尔" },
1012
+ { value: "638", label: "留尼汪" },
1013
+ { value: "642", label: "罗马尼亚" },
1014
+ { value: "643", label: "俄罗斯联邦" },
1015
+ { value: "646", label: "卢旺达" },
1016
+ { value: "654", label: "圣赫勒拿" },
1017
+ { value: "659", label: "圣基茨和尼维斯" },
1018
+ { value: "660", label: "安圭拉" },
1019
+ { value: "662", label: "圣卢西亚" },
1020
+ { value: "666", label: "圣皮埃尔和密克隆" },
1021
+ { value: "670", label: "圣文森特和格林纳丁斯" },
1022
+ { value: "674", label: "圣马力诺" },
1023
+ { value: "678", label: "圣多美和普林西比" },
1024
+ { value: "682", label: "沙特阿拉伯" },
1025
+ { value: "686", label: "塞内加尔" },
1026
+ { value: "688", label: "塞尔维亚" },
1027
+ { value: "690", label: "塞舌尔" },
1028
+ { value: "694", label: "塞拉利昂" },
1029
+ { value: "702", label: "新加坡" },
1030
+ { value: "703", label: "斯洛伐克" },
1031
+ { value: "704", label: "越南" },
1032
+ { value: "705", label: "斯洛文尼亚" },
1033
+ { value: "706", label: "索马里" },
1034
+ { value: "710", label: "南非" },
1035
+ { value: "716", label: "津巴布韦" },
1036
+ { value: "724", label: "西班牙" },
1037
+ { value: "728", label: "南苏丹" },
1038
+ { value: "732", label: "西撒哈拉" },
1039
+ { value: "736", label: "苏丹" },
1040
+ { value: "740", label: "苏里南" },
1041
+ { value: "744", label: "斯瓦尔巴岛和扬马延岛" },
1042
+ { value: "748", label: "斯威士兰" },
1043
+ { value: "752", label: "瑞典" },
1044
+ { value: "756", label: "瑞士" },
1045
+ { value: "760", label: "叙利亚" },
1046
+ { value: "762", label: "塔吉克斯坦" },
1047
+ { value: "764", label: "泰国" },
1048
+ { value: "768", label: "多哥" },
1049
+ { value: "772", label: "托克劳" },
1050
+ { value: "776", label: "汤加" },
1051
+ { value: "780", label: "特立尼达和多巴哥" },
1052
+ { value: "784", label: "阿联酋" },
1053
+ { value: "788", label: "突尼斯" },
1054
+ { value: "792", label: "土耳其" },
1055
+ { value: "795", label: "土库曼斯坦" },
1056
+ { value: "796", label: "特克斯和凯科斯群岛" },
1057
+ { value: "798", label: "图瓦卢" },
1058
+ { value: "800", label: "乌干达" },
1059
+ { value: "804", label: "乌克兰" },
1060
+ { value: "807", label: "前南马其顿" },
1061
+ { value: "818", label: "埃及" },
1062
+ { value: "826", label: "英国" },
1063
+ { value: "831", label: "根西岛" },
1064
+ { value: "832", label: "泽西岛" },
1065
+ { value: "833", label: "马恩岛" },
1066
+ { value: "834", label: "坦桑尼亚" },
1067
+ { value: "840", label: "美国" },
1068
+ { value: "850", label: "美属维尔京群岛" },
1069
+ { value: "854", label: "布基纳法索" },
1070
+ { value: "858", label: "乌拉圭" },
1071
+ { value: "860", label: "乌兹别克斯坦" },
1072
+ { value: "862", label: "委内瑞拉" },
1073
+ { value: "876", label: "瓦利斯和富图纳" },
1074
+ { value: "882", label: "萨摩亚" },
1075
+ { value: "887", label: "也门" },
1076
+ { value: "891", label: "南斯拉夫" },
1077
+ { value: "894", label: "赞比亚" },
1078
+ { value: "A00", label: "科索沃" }
1079
+ ];
1080
+
1081
+ function getLable(value?: string) {
1082
+
1083
+ return option.find(e => e.value === value)?.label || '';
1084
+
1085
+ }
1086
+ if (props.readOnly) {
1087
+ return <span className='digtal-stakeholder-form-text'>{getLable(props.value)}</span>
1088
+ } else {
1089
+ return <Select style={{ width: 100 }} options={option} {...props} />
1090
+ }
1091
+ }
1092
+ }
1093
+ class Discontinue {
1094
+
1095
+ private static timer: any;
1096
+
1097
+ static start = (interval = 200) => new Promise<void>(resolve => {
1098
+ clearTimeout(Discontinue.timer);
1099
+ Discontinue.timer = setTimeout(resolve, interval);
1100
+ })
1101
+ }
1102
+