kts-component-invoice-operate 3.2.244 → 3.2.246

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