kts-component-invoice-operate 3.2.192 → 3.2.193

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