kts-component-invoice-operate 3.2.192 → 3.2.194

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