kts-component-invoice-operate 3.2.82 → 3.2.83

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 (204) 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 +8 -8
  8. package/dist/index.esm.js +609 -561
  9. package/dist/index.js +609 -561
  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 +61 -61
  18. package/src/Invoice/Invoice-digtal/_test/disabled/index.tsx +38 -38
  19. package/src/Invoice/Invoice-digtal/_test/easiest/index.tsx +16 -16
  20. package/src/Invoice/Invoice-digtal/_test/header/index.tsx +84 -84
  21. package/src/Invoice/Invoice-digtal/_test/importGoods/index.tsx +470 -470
  22. package/src/Invoice/Invoice-digtal/_test/importStakeholder/index.tsx +17 -17
  23. package/src/Invoice/Invoice-digtal/_test/lineCredit/index.tsx +20 -20
  24. package/src/Invoice/Invoice-digtal/_test/prefab/index.tsx +150 -150
  25. package/src/Invoice/Invoice-digtal/_test/readOnly/index.tsx +42 -42
  26. package/src/Invoice/Invoice-digtal/_test/stakeholder/index.tsx +12 -12
  27. package/src/Invoice/Invoice-digtal/_test/typeSelection/index.tsx +29 -29
  28. package/src/Invoice/Invoice-digtal/index.md +30 -30
  29. package/src/Invoice/InvoiceController/InvoiceControllerForm/index.ts +94 -94
  30. package/src/Invoice/InvoiceController/InvoiceControllerState/AutoComplete/index.ts +17 -17
  31. package/src/Invoice/InvoiceController/InvoiceControllerState/BuyerState/index.tsx +88 -88
  32. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/Drag/index.ts +15 -15
  33. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/EndowCode/index.tsx +104 -104
  34. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IColumnsReplenish/index.ts +10 -10
  35. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IGood/index.ts +78 -78
  36. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ImportGoods/index.ts +80 -80
  37. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/LineAttributeType/index.ts +7 -7
  38. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ProductComparison/index.ts +9 -9
  39. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/index.ts +113 -113
  40. package/src/Invoice/InvoiceController/InvoiceControllerState/Stakeholder/index.ts +13 -13
  41. package/src/Invoice/InvoiceController/InvoiceControllerState/index.ts +65 -65
  42. package/src/Invoice/InvoiceController/fns/addGood.ts +11 -11
  43. package/src/Invoice/InvoiceController/fns/addGoodDiscount.ts +126 -126
  44. package/src/Invoice/InvoiceController/fns/addGoodDiscountV2.ts +85 -85
  45. package/src/Invoice/InvoiceController/fns/delGood.ts +41 -41
  46. package/src/Invoice/InvoiceController/fns/getGoodsSearch.ts +26 -26
  47. package/src/Invoice/InvoiceController/fns/importGoodsDrawer.ts +79 -79
  48. package/src/Invoice/InvoiceController/fns/mergeDetails.ts +165 -165
  49. package/src/Invoice/InvoiceController/fns/mergeDiscount.ts +28 -28
  50. package/src/Invoice/InvoiceController/fns/saveEditGood.ts +24 -24
  51. package/src/Invoice/InvoiceController/fns/setEditGood.ts +16 -16
  52. package/src/Invoice/InvoiceController/fns/setGoods.ts +10 -10
  53. package/src/Invoice/InvoiceController/fns/updateInvoiceNo.ts +8 -8
  54. package/src/Invoice/InvoiceController/index.ts +77 -77
  55. package/src/Invoice/_test/buyerNameSearch/index.tsx +42 -42
  56. package/src/Invoice/_test/deduction/index.tsx +935 -935
  57. package/src/Invoice/_test/draft/index.tsx +40 -40
  58. package/src/Invoice/_test/easiest/index.tsx +5 -5
  59. package/src/Invoice/_test/endowCode/index.tsx +1071 -1071
  60. package/src/Invoice/_test/goodsMenuExpand/index.tsx +32 -32
  61. package/src/Invoice/_test/importBuyer/index.tsx +74 -74
  62. package/src/Invoice/_test/importGoods/index.tsx +516 -1078
  63. package/src/Invoice/_test/invoiceType/index.tsx +59 -59
  64. package/src/Invoice/_test/isInvoiceNo/index.tsx +12 -12
  65. package/src/Invoice/_test/replaceHead/index.tsx +22 -22
  66. package/src/Invoice/_test/retrieveData/index.tsx +22 -22
  67. package/src/Invoice/_test/seller/index.tsx +28 -28
  68. package/src/Invoice/_test/setDataSource/index.tsx +66 -66
  69. package/src/Invoice/_test/unit/index.tsx +19 -19
  70. package/src/Invoice/index.less +29 -29
  71. package/src/Invoice/index.md +53 -53
  72. package/src/Invoice/index.tsx +165 -165
  73. package/src/Invoice/tools/calculate/index.ts +112 -112
  74. package/src/Invoice/tools/coolingFn/index.ts +17 -17
  75. package/src/Invoice/tools/evaluate/index.ts +7 -7
  76. package/src/Invoice/tools/idGenerator/index.ts +2 -2
  77. package/src/Invoice/tools/itemName/index.ts +55 -55
  78. package/src/Invoice/tools/lazyFn/index.ts +19 -19
  79. package/src/Invoice/tools/mounting/index.ts +13 -13
  80. package/src/Invoice/tools/strringFn/index.ts +40 -40
  81. package/src/Invoice/tools/useToGenerateId/index.ts +8 -8
  82. package/src/Invoice/ui/default/AddComparisonDrawer/index.tsx +149 -149
  83. package/src/Invoice/ui/default/Buyer/index.less +219 -219
  84. package/src/Invoice/ui/default/Buyer/index.tsx +114 -114
  85. package/src/Invoice/ui/default/Buyer/ui/BuyerNameInput/index.tsx +166 -166
  86. package/src/Invoice/ui/default/Buyer/ui/ImportBuyerButton/index.tsx +21 -21
  87. package/src/Invoice/ui/default/EndowCodeDrawer/index.less +8 -8
  88. package/src/Invoice/ui/default/EndowCodeDrawer/index.tsx +543 -543
  89. package/src/Invoice/ui/default/GoodsList/hook/useColumns/autoFillFn/index.ts +533 -533
  90. package/src/Invoice/ui/default/GoodsList/hook/useColumns/index.tsx +686 -664
  91. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
  92. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
  93. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.less +18 -18
  94. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.tsx +47 -47
  95. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +17 -17
  96. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +75 -75
  97. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  98. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  99. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +76 -76
  100. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +45 -45
  101. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +38 -38
  102. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
  103. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +98 -98
  104. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  105. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  106. package/src/Invoice/ui/default/GoodsList/hook/useDeduction/index.tsx +24 -24
  107. package/src/Invoice/ui/default/GoodsList/hook/useOnRow/index.tsx +39 -39
  108. package/src/Invoice/ui/default/GoodsList/hook/useRowSelection/index.tsx +111 -111
  109. package/src/Invoice/ui/default/GoodsList/hook/useWindowClick/index.tsx +23 -23
  110. package/src/Invoice/ui/default/GoodsList/index.less +179 -179
  111. package/src/Invoice/ui/default/GoodsList/index.tsx +205 -205
  112. package/src/Invoice/ui/default/GoodsList/ui/AddRowButton/index.tsx +65 -65
  113. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.less +21 -21
  114. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +244 -244
  115. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  116. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +69 -69
  117. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +65 -65
  118. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDetails/index.tsx +91 -91
  119. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDiscount/index.tsx +36 -36
  120. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesDiscount/index.tsx +110 -110
  121. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesGifts/index.tsx +75 -75
  122. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/index.tsx +37 -37
  123. package/src/Invoice/ui/default/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
  124. package/src/Invoice/ui/default/GoodsList/ui/Search/index.less +10 -10
  125. package/src/Invoice/ui/default/GoodsList/ui/Search/index.tsx +52 -52
  126. package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.less +18 -18
  127. package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.tsx +109 -109
  128. package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.less +28 -28
  129. package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.tsx +57 -57
  130. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.less +38 -38
  131. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.tsx +108 -108
  132. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.less +44 -44
  133. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.tsx +96 -96
  134. package/src/Invoice/ui/default/GoodsList/ui/TaxIncludedSwitch/index.tsx +30 -30
  135. package/src/Invoice/ui/default/ImportBuyerDrawer/index.tsx +75 -75
  136. package/src/Invoice/ui/default/ImportGoodsDrawer/index.tsx +201 -201
  137. package/src/Invoice/ui/default/InvoiceHeader/index.less +68 -68
  138. package/src/Invoice/ui/default/InvoiceHeader/index.tsx +246 -246
  139. package/src/Invoice/ui/default/Seller/index.less +113 -113
  140. package/src/Invoice/ui/default/Seller/index.tsx +98 -98
  141. package/src/Invoice/ui/default/Sign/index.less +14 -14
  142. package/src/Invoice/ui/default/Sign/index.tsx +71 -71
  143. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/autoFillFn/index.ts +519 -519
  144. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/index.tsx +648 -648
  145. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/svg/plus.svg +11 -11
  146. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
  147. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
  148. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +9 -9
  149. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +50 -50
  150. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  151. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  152. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +76 -76
  153. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
  154. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +34 -34
  155. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
  156. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +98 -98
  157. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  158. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  159. package/src/Invoice/ui/digtal/GoodsList/hook/useOnRow/index.tsx +39 -39
  160. package/src/Invoice/ui/digtal/GoodsList/hook/useRowSelection/index.tsx +121 -121
  161. package/src/Invoice/ui/digtal/GoodsList/hook/useWindowClick/index.tsx +23 -23
  162. package/src/Invoice/ui/digtal/GoodsList/index.less +56 -56
  163. package/src/Invoice/ui/digtal/GoodsList/index.tsx +180 -180
  164. package/src/Invoice/ui/digtal/GoodsList/ui/AddRowButton/index.tsx +65 -65
  165. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +339 -339
  166. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/svg/add.svg +11 -11
  167. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  168. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
  169. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +35 -35
  170. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +82 -82
  171. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useReselectInvoiceType/index.tsx +57 -57
  172. package/src/Invoice/ui/digtal/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
  173. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.less +11 -11
  174. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.tsx +50 -50
  175. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.less +53 -53
  176. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.tsx +99 -99
  177. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/svg/fork.svg +11 -11
  178. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.less +28 -28
  179. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.tsx +53 -53
  180. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.less +38 -38
  181. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.tsx +108 -108
  182. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual.o/index.less +44 -44
  183. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual.o/index.tsx +96 -96
  184. package/src/Invoice/ui/digtal/GoodsList/ui/TaxIncludedSwitch/index.tsx +30 -30
  185. package/src/Invoice/ui/digtal/InvoiceHeader/index.less +57 -57
  186. package/src/Invoice/ui/digtal/InvoiceHeader/index.tsx +77 -77
  187. package/src/Invoice/ui/digtal/Sign/index.less +48 -48
  188. package/src/Invoice/ui/digtal/Sign/index.tsx +99 -99
  189. package/src/Invoice/ui/digtal/Stakeholder/index.less +75 -75
  190. package/src/Invoice/ui/digtal/Stakeholder/index.tsx +394 -394
  191. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowDown.svg +2 -2
  192. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowUp.svg +2 -2
  193. package/src/Invoice/ui/digtal/Stakeholder/svg/plus.svg +11 -11
  194. package/src/InvoiceTypeModal/_test/easiest/index.tsx +31 -31
  195. package/src/InvoiceTypeModal/index.less +7 -7
  196. package/src/InvoiceTypeModal/index.md +5 -5
  197. package/src/InvoiceTypeModal/index.tsx +153 -153
  198. package/src/TaxClassificationCodeModal/_test/easiest/index.tsx +177 -177
  199. package/src/TaxClassificationCodeModal/index.md +6 -6
  200. package/src/TaxClassificationCodeModal/index.tsx +67 -67
  201. package/src/index.ts +12 -12
  202. package/tsconfig.json +31 -31
  203. package/typings.d.ts +3 -3
  204. package/yarn.e.lock +14331 -14331
@@ -1,110 +1,110 @@
1
-
2
- import React from "react"
3
- import { Button, message } from "kts-components-antd-x3"
4
- import { chain, bignumber } from 'mathjs';
5
- import Invoice from '../../../../../../..'
6
- import { LineAttributeType } from "../../../../../../../InvoiceController";
7
-
8
- /** 销售折让 */
9
- export default function useSalesDiscount() {
10
-
11
- const controller = Invoice.useInvoiceController();
12
-
13
- const selectedGoodIndex = controller.useMemo(s => s.goodsListState.selectedGoodIndex, []);
14
-
15
- const goodsMap = controller.useMemo(s => s.goodsListState.goodsMap, []);
16
-
17
- const isSalesDiscount = controller.useMemo(s => s.goodsListState.isSalesDiscount, []);
18
-
19
- const onClick = React.useCallback(async () => {
20
- const selectedGood = selectedGoodIndex.map(e => goodsMap.get(e));
21
-
22
- if (selectedGood.filter(e => e?.lineAttribute === LineAttributeType.折扣行 || e?.lineAttribute === LineAttributeType.被折扣行).length > 0) {
23
- const content = '不能选择折扣行和被折扣行';
24
- message.error({ content, key: content });
25
- return;
26
- }
27
-
28
- /** 折让行 */
29
- const concession = selectedGood.filter(e => e?.lineAttribute === LineAttributeType.折让行)[0];
30
- if (!concession) {
31
- const content = '未选择折让行';
32
- message.error({ content, key: content })
33
- return;
34
- }
35
-
36
- /** 准备添加折扣的货物列表 */
37
- const discountGood = selectedGood.filter(e => e?.lineAttribute !== LineAttributeType.折让行);
38
-
39
- /** 折扣总金额 */
40
- const totalDiscoline = chain(bignumber(-1 * (concession.lineAmountIncludeTax || 0)));
41
-
42
- let discolinesSum = chain(bignumber(0));
43
-
44
- /** 总金额 */
45
- const totalAmount = (() => {
46
- let sum = 0;
47
- discountGood.forEach(e => { sum += e?.lineAmountIncludeTax ?? 0 });
48
- return sum;
49
- })()
50
-
51
- // 每行的折扣金额
52
- const discolines: number[] = discountGood.map((e, i) => {
53
- // 折扣金额占比
54
- const share = chain(bignumber(e?.lineAmountIncludeTax ?? 0))
55
- .divide(bignumber(totalAmount));
56
-
57
- // 折扣金额
58
- const value = totalDiscoline
59
- .multiply(share.done())
60
-
61
- .multiply(bignumber(100))
62
- .round()
63
- .divide(bignumber(100))
64
-
65
- .done();
66
-
67
- discolinesSum = discolinesSum.add(value);
68
- return value.toNumber();
69
- });
70
-
71
- // 剩余折扣金额
72
- let surplus = totalDiscoline.subtract(discolinesSum.done());
73
-
74
- // 补充剩余折扣金
75
- for (let i = 0; i < discolines.length; i++) {
76
- if (surplus.smaller(0.01).done()) break;
77
- discolines[i] = chain(bignumber(discolines[i])).add(bignumber(0.01)).done().toNumber();
78
- surplus = surplus.subtract(bignumber(0.01));
79
- }
80
-
81
- // 清楚折让行
82
- await controller.run(async s => { s.goodsListState.goodsList = s.goodsListState.goodsList.filter(e => e.$index !== concession.$index) })
83
- await controller.run(async s => { s.goodsListState.selectedGoodIndex = [] });
84
-
85
- // 给一组货物添加折扣行
86
- await controller.addGoodDiscountV2(discolines.map((e, i) => {
87
- return {
88
- $index: discountGood[i]?.$index as string,
89
- discolineAmountunt: e as number,
90
- }
91
- }))
92
- }, [controller, selectedGoodIndex, goodsMap])
93
-
94
- const button = React.useMemo(() => {
95
- if (!isSalesDiscount) return <></>;
96
- return (
97
- <Button
98
- onClick={onClick}
99
- disabled={selectedGoodIndex.length <= 1}
100
- >
101
- 销售折让
102
- </Button>
103
- )
104
- }, [selectedGoodIndex.length, isSalesDiscount])
105
-
106
- return {
107
- /** 按钮 */
108
- button,
109
- }
110
- }
1
+
2
+ import React from "react"
3
+ import { Button, message } from "kts-components-antd-x3"
4
+ import { chain, bignumber } from 'mathjs';
5
+ import Invoice from '../../../../../../..'
6
+ import { LineAttributeType } from "../../../../../../../InvoiceController";
7
+
8
+ /** 销售折让 */
9
+ export default function useSalesDiscount() {
10
+
11
+ const controller = Invoice.useInvoiceController();
12
+
13
+ const selectedGoodIndex = controller.useMemo(s => s.goodsListState.selectedGoodIndex, []);
14
+
15
+ const goodsMap = controller.useMemo(s => s.goodsListState.goodsMap, []);
16
+
17
+ const isSalesDiscount = controller.useMemo(s => s.goodsListState.isSalesDiscount, []);
18
+
19
+ const onClick = React.useCallback(async () => {
20
+ const selectedGood = selectedGoodIndex.map(e => goodsMap.get(e));
21
+
22
+ if (selectedGood.filter(e => e?.lineAttribute === LineAttributeType.折扣行 || e?.lineAttribute === LineAttributeType.被折扣行).length > 0) {
23
+ const content = '不能选择折扣行和被折扣行';
24
+ message.error({ content, key: content });
25
+ return;
26
+ }
27
+
28
+ /** 折让行 */
29
+ const concession = selectedGood.filter(e => e?.lineAttribute === LineAttributeType.折让行)[0];
30
+ if (!concession) {
31
+ const content = '未选择折让行';
32
+ message.error({ content, key: content })
33
+ return;
34
+ }
35
+
36
+ /** 准备添加折扣的货物列表 */
37
+ const discountGood = selectedGood.filter(e => e?.lineAttribute !== LineAttributeType.折让行);
38
+
39
+ /** 折扣总金额 */
40
+ const totalDiscoline = chain(bignumber(-1 * (concession.lineAmountIncludeTax || 0)));
41
+
42
+ let discolinesSum = chain(bignumber(0));
43
+
44
+ /** 总金额 */
45
+ const totalAmount = (() => {
46
+ let sum = 0;
47
+ discountGood.forEach(e => { sum += e?.lineAmountIncludeTax ?? 0 });
48
+ return sum;
49
+ })()
50
+
51
+ // 每行的折扣金额
52
+ const discolines: number[] = discountGood.map((e, i) => {
53
+ // 折扣金额占比
54
+ const share = chain(bignumber(e?.lineAmountIncludeTax ?? 0))
55
+ .divide(bignumber(totalAmount));
56
+
57
+ // 折扣金额
58
+ const value = totalDiscoline
59
+ .multiply(share.done())
60
+
61
+ .multiply(bignumber(100))
62
+ .round()
63
+ .divide(bignumber(100))
64
+
65
+ .done();
66
+
67
+ discolinesSum = discolinesSum.add(value);
68
+ return value.toNumber();
69
+ });
70
+
71
+ // 剩余折扣金额
72
+ let surplus = totalDiscoline.subtract(discolinesSum.done());
73
+
74
+ // 补充剩余折扣金
75
+ for (let i = 0; i < discolines.length; i++) {
76
+ if (surplus.smaller(0.01).done()) break;
77
+ discolines[i] = chain(bignumber(discolines[i])).add(bignumber(0.01)).done().toNumber();
78
+ surplus = surplus.subtract(bignumber(0.01));
79
+ }
80
+
81
+ // 清楚折让行
82
+ await controller.run(async s => { s.goodsListState.goodsList = s.goodsListState.goodsList.filter(e => e.$index !== concession.$index) })
83
+ await controller.run(async s => { s.goodsListState.selectedGoodIndex = [] });
84
+
85
+ // 给一组货物添加折扣行
86
+ await controller.addGoodDiscountV2(discolines.map((e, i) => {
87
+ return {
88
+ $index: discountGood[i]?.$index as string,
89
+ discolineAmountunt: e as number,
90
+ }
91
+ }))
92
+ }, [controller, selectedGoodIndex, goodsMap])
93
+
94
+ const button = React.useMemo(() => {
95
+ if (!isSalesDiscount) return <></>;
96
+ return (
97
+ <Button
98
+ onClick={onClick}
99
+ disabled={selectedGoodIndex.length <= 1}
100
+ >
101
+ 销售折让
102
+ </Button>
103
+ )
104
+ }, [selectedGoodIndex.length, isSalesDiscount])
105
+
106
+ return {
107
+ /** 按钮 */
108
+ button,
109
+ }
110
+ }
@@ -1,76 +1,76 @@
1
-
2
- import React from "react"
3
- import { Button, message } from "kts-components-antd-x3"
4
- import { chain, bignumber } from 'mathjs';
5
- import Invoice from '../../../../../../..'
6
- import { IGood, LineAttributeType } from "../../../../../../../InvoiceController";
7
- import { Dropdown, MenuProps } from "kts-xui";
8
-
9
- /** 销售赠品 */
10
- export default function useSalesGifts() {
11
-
12
- const controller = Invoice.useInvoiceController();
13
-
14
- const isSalesGifts = controller.useMemo(s => s.goodsListState.isSalesGifts, []);
15
-
16
- const selectedGoodIndex = controller.useMemo(s => s.goodsListState.selectedGoodIndex, []);
17
-
18
- const goodsList = controller.useMemo(s => s.goodsListState.goodsList, [])
19
-
20
- const giveaways = React.useMemo(() => goodsList.filter(e => e.lineAttribute === LineAttributeType.赠品行), [goodsList])
21
-
22
- const onClickAuto = React.useCallback(async () => {
23
- for (let g of giveaways) {
24
- g.lineAttribute = LineAttributeType.正常;
25
- await controller.addGoodDiscountV2([{ $index: g.$index, discolineAmountunt: g.lineAmountIncludeTax || 0 }]);
26
- }
27
- }, [controller, giveaways])
28
-
29
- const onClickManual = React.useCallback(async () => {
30
- const { goodsMap, selectedGoodIndex } = controller.state.goodsListState;
31
- const giveaways = selectedGoodIndex.map(e => goodsMap.get(e) as IGood).filter(e => !!e);
32
-
33
- if (giveaways.some(e => e.lineAttribute === LineAttributeType.正常 || e.lineAttribute === LineAttributeType.赠品行) === false) {
34
- const content = '只能选择‘赠品行’和‘正常行’';
35
- return message.error({ content, key: content });
36
- }
37
-
38
- for (let g of giveaways) {
39
- await controller.addGoodDiscountV2([{ $index: g.$index, discolineAmountunt: g.lineAmountIncludeTax || 0 }]);
40
- }
41
-
42
- controller.state.goodsListState.selectedGoodIndex = [];
43
- }, [controller])
44
-
45
- const items: MenuProps['items'] = React.useMemo(() => {
46
- return [
47
- {
48
- key: '0',
49
- label: '自动转换',
50
- disabled: giveaways.length <= 0,
51
- onClick: onClickAuto,
52
- }, {
53
- key: '1',
54
- label: '手动转换',
55
- disabled: selectedGoodIndex.length <= 0,
56
- onClick: onClickManual,
57
- },
58
- ];
59
- }, [selectedGoodIndex, onClickManual, onClickAuto])
60
-
61
- const button = React.useMemo(() => {
62
- if (!isSalesGifts) return;
63
- return (
64
- <Dropdown menu={{ items }} trigger={['click']} >
65
- <Button>
66
- 销售赠品
67
- </Button>
68
- </Dropdown>
69
- )
70
- }, [items, isSalesGifts])
71
-
72
- return {
73
- /** 按钮 */
74
- button,
75
- }
1
+
2
+ import React from "react"
3
+ import { Button, message } from "kts-components-antd-x3"
4
+ import { chain, bignumber } from 'mathjs';
5
+ import Invoice from '../../../../../../..'
6
+ import { IGood, LineAttributeType } from "../../../../../../../InvoiceController";
7
+ import { Dropdown, MenuProps } from "kts-xui";
8
+
9
+ /** 销售赠品 */
10
+ export default function useSalesGifts() {
11
+
12
+ const controller = Invoice.useInvoiceController();
13
+
14
+ const isSalesGifts = controller.useMemo(s => s.goodsListState.isSalesGifts, []);
15
+
16
+ const selectedGoodIndex = controller.useMemo(s => s.goodsListState.selectedGoodIndex, []);
17
+
18
+ const goodsList = controller.useMemo(s => s.goodsListState.goodsList, [])
19
+
20
+ const giveaways = React.useMemo(() => goodsList.filter(e => e.lineAttribute === LineAttributeType.赠品行), [goodsList])
21
+
22
+ const onClickAuto = React.useCallback(async () => {
23
+ for (let g of giveaways) {
24
+ g.lineAttribute = LineAttributeType.正常;
25
+ await controller.addGoodDiscountV2([{ $index: g.$index, discolineAmountunt: g.lineAmountIncludeTax || 0 }]);
26
+ }
27
+ }, [controller, giveaways])
28
+
29
+ const onClickManual = React.useCallback(async () => {
30
+ const { goodsMap, selectedGoodIndex } = controller.state.goodsListState;
31
+ const giveaways = selectedGoodIndex.map(e => goodsMap.get(e) as IGood).filter(e => !!e);
32
+
33
+ if (giveaways.some(e => e.lineAttribute === LineAttributeType.正常 || e.lineAttribute === LineAttributeType.赠品行) === false) {
34
+ const content = '只能选择‘赠品行’和‘正常行’';
35
+ return message.error({ content, key: content });
36
+ }
37
+
38
+ for (let g of giveaways) {
39
+ await controller.addGoodDiscountV2([{ $index: g.$index, discolineAmountunt: g.lineAmountIncludeTax || 0 }]);
40
+ }
41
+
42
+ controller.state.goodsListState.selectedGoodIndex = [];
43
+ }, [controller])
44
+
45
+ const items: MenuProps['items'] = React.useMemo(() => {
46
+ return [
47
+ {
48
+ key: '0',
49
+ label: '自动转换',
50
+ disabled: giveaways.length <= 0,
51
+ onClick: onClickAuto,
52
+ }, {
53
+ key: '1',
54
+ label: '手动转换',
55
+ disabled: selectedGoodIndex.length <= 0,
56
+ onClick: onClickManual,
57
+ },
58
+ ];
59
+ }, [selectedGoodIndex, onClickManual, onClickAuto])
60
+
61
+ const button = React.useMemo(() => {
62
+ if (!isSalesGifts) return;
63
+ return (
64
+ <Dropdown menu={{ items }} trigger={['click']} >
65
+ <Button>
66
+ 销售赠品
67
+ </Button>
68
+ </Dropdown>
69
+ )
70
+ }, [items, isSalesGifts])
71
+
72
+ return {
73
+ /** 按钮 */
74
+ button,
75
+ }
76
76
  }
@@ -1,38 +1,38 @@
1
-
2
- import React from "react";
3
- import { Button, Dropdown, Menu } from "kts-components-antd-x3";
4
-
5
- import useDelRowButton from "./hooks/useDelRowButton";
6
- import useAddDiscountRowButton from "./hooks/useAddDiscountRowButton";
7
- import useCommodityComparisonButton from "./hooks/useCommodityComparisonButton";
8
-
9
- export default function BulkMenu() {
10
-
11
- /** 删除行 */
12
- const delRowButton = useDelRowButton();
13
-
14
- /** 添加折扣行 */
15
- const addDiscountRowButton = useAddDiscountRowButton();
16
-
17
- /** 执行商品对照 */
18
- const commodityComparisonButton = useCommodityComparisonButton();
19
-
20
- const menu = (
21
- <Menu>
22
- {delRowButton.menuItem}
23
- {addDiscountRowButton.menuItem}
24
- {commodityComparisonButton.menuItem}
25
- </Menu>
26
- );
27
-
28
- return (
29
- <>
30
- <Dropdown overlay={menu}>
31
- <Button>
32
- 批量操作行
33
- </Button>
34
- </Dropdown>
35
- {addDiscountRowButton.drawer}
36
- </>
37
- )
1
+
2
+ import React from "react";
3
+ import { Button, Dropdown, Menu } from "kts-components-antd-x3";
4
+
5
+ import useDelRowButton from "./hooks/useDelRowButton";
6
+ import useAddDiscountRowButton from "./hooks/useAddDiscountRowButton";
7
+ import useCommodityComparisonButton from "./hooks/useCommodityComparisonButton";
8
+
9
+ export default function BulkMenu() {
10
+
11
+ /** 删除行 */
12
+ const delRowButton = useDelRowButton();
13
+
14
+ /** 添加折扣行 */
15
+ const addDiscountRowButton = useAddDiscountRowButton();
16
+
17
+ /** 执行商品对照 */
18
+ const commodityComparisonButton = useCommodityComparisonButton();
19
+
20
+ const menu = (
21
+ <Menu>
22
+ {delRowButton.menuItem}
23
+ {addDiscountRowButton.menuItem}
24
+ {commodityComparisonButton.menuItem}
25
+ </Menu>
26
+ );
27
+
28
+ return (
29
+ <>
30
+ <Dropdown overlay={menu}>
31
+ <Button>
32
+ 批量操作行
33
+ </Button>
34
+ </Dropdown>
35
+ {addDiscountRowButton.drawer}
36
+ </>
37
+ )
38
38
  }
@@ -1,37 +1,37 @@
1
-
2
- import React from 'react';
3
- import { Switch, Icon, Tooltip } from 'kts-components-antd-x3';
4
- import Invoice from '../../../../..';
5
-
6
- export default () => {
7
-
8
- const controller = Invoice.useInvoiceController();
9
-
10
- const productComparison = controller.useMemo(s => s.goodsListState.productComparison, [])
11
-
12
- const isMyShow = controller.useMemo(s => s.goodsListState.isMyShow, []);
13
-
14
- const onChange = React.useCallback(e => {
15
- controller.run(async s => s.goodsListState.isMyShow = !s.goodsListState.isMyShow)
16
- }, [])
17
-
18
- if (!productComparison.onComply) return <></>;
19
-
20
- return (
21
- <span>
22
- <label style={{ marginRight: 2 }} >
23
- <Tooltip title="蓝色代表我方商品描述,黑色代表对方的商品描述。">
24
- <Icon style={{ marginRight: 3 }} type="info-circle" />
25
- </Tooltip>
26
- 使用哪方商品描述:
27
- </label>
28
- <Switch
29
- checked={isMyShow}
30
- checkedChildren="我方"
31
- unCheckedChildren="对方"
32
- defaultChecked
33
- onChange={onChange}
34
- />
35
- </span>
36
- )
1
+
2
+ import React from 'react';
3
+ import { Switch, Icon, Tooltip } from 'kts-components-antd-x3';
4
+ import Invoice from '../../../../..';
5
+
6
+ export default () => {
7
+
8
+ const controller = Invoice.useInvoiceController();
9
+
10
+ const productComparison = controller.useMemo(s => s.goodsListState.productComparison, [])
11
+
12
+ const isMyShow = controller.useMemo(s => s.goodsListState.isMyShow, []);
13
+
14
+ const onChange = React.useCallback(e => {
15
+ controller.run(async s => s.goodsListState.isMyShow = !s.goodsListState.isMyShow)
16
+ }, [])
17
+
18
+ if (!productComparison.onComply) return <></>;
19
+
20
+ return (
21
+ <span>
22
+ <label style={{ marginRight: 2 }} >
23
+ <Tooltip title="蓝色代表我方商品描述,黑色代表对方的商品描述。">
24
+ <Icon style={{ marginRight: 3 }} type="info-circle" />
25
+ </Tooltip>
26
+ 使用哪方商品描述:
27
+ </label>
28
+ <Switch
29
+ checked={isMyShow}
30
+ checkedChildren="我方"
31
+ unCheckedChildren="对方"
32
+ defaultChecked
33
+ onChange={onChange}
34
+ />
35
+ </span>
36
+ )
37
37
  }
@@ -1,11 +1,11 @@
1
- .kts-invoice-operate-goods-list-able-list {
2
- .kts-invoice-operate-goods-list-search {
3
- width: 350px;
4
-
5
- input {
6
- border-radius: 999px;
7
- border-color : #b8b8b8;
8
- font-size : 12px;
9
- }
10
- }
1
+ .kts-invoice-operate-goods-list-able-list {
2
+ .kts-invoice-operate-goods-list-search {
3
+ width: 350px;
4
+
5
+ input {
6
+ border-radius: 999px;
7
+ border-color : #b8b8b8;
8
+ font-size : 12px;
9
+ }
10
+ }
11
11
  }
@@ -1,52 +1,52 @@
1
-
2
- import React from "react";
3
- import { Icon, Input, message } from "kts-components-antd-x3";
4
- import { ReactComponent as MagnifierSvg } from './icon/magnifier.svg';
5
- import Invoice from '../../../../..';
6
- import './index.less';
7
-
8
- export default function Search() {
9
-
10
- const controller = Invoice.useInvoiceController();
11
-
12
- const [value, setValue] = React.useState('');
13
-
14
- const readOnly = controller.useMemo(s => !!s.goodsListState.editGood, [])
15
-
16
- const columnshide = controller.useMemo(s => s.goodsListState.columnshide, [])
17
-
18
- /** 是否含税 */
19
- const isTaxIncluded = controller.useMemo(s => s.goodsListState.isTaxIncluded, [])
20
-
21
- const onClick = React.useCallback(async () => {
22
- await controller.saveEditGood();
23
- await controller.wait();
24
- if (controller.state.goodsListState.editGood) {
25
- message.error({
26
- content: '你正在编辑一个货物',
27
- key: '你正在编辑一个货物',
28
- });
29
- return;
30
- }
31
- }, [])
32
-
33
- React.useEffect(() => {
34
- controller.run(async s => {
35
- s.goodsListState.searchValue = value.trim();
36
- })
37
- }, [value, controller])
38
-
39
- return (
40
- <Input
41
- size="small"
42
- readOnly={readOnly}
43
- value={value}
44
- className="kts-invoice-operate-goods-list-search"
45
- placeholder={`请您输入${columnshide.includes('itemCode') ? '' : '商品编码、'}项目名称、规格型号、金额(${isTaxIncluded ? '含税' : '不含税'})搜索`}
46
- prefix={<Icon component={MagnifierSvg} style={{ color: "#b8b8b8" }} />}
47
- onChange={e => { setValue(e.target.value); }}
48
- onClick={onClick}
49
- />
50
- )
51
- }
52
-
1
+
2
+ import React from "react";
3
+ import { Icon, Input, message } from "kts-components-antd-x3";
4
+ import { ReactComponent as MagnifierSvg } from './icon/magnifier.svg';
5
+ import Invoice from '../../../../..';
6
+ import './index.less';
7
+
8
+ export default function Search() {
9
+
10
+ const controller = Invoice.useInvoiceController();
11
+
12
+ const [value, setValue] = React.useState('');
13
+
14
+ const readOnly = controller.useMemo(s => !!s.goodsListState.editGood, [])
15
+
16
+ const columnshide = controller.useMemo(s => s.goodsListState.columnshide, [])
17
+
18
+ /** 是否含税 */
19
+ const isTaxIncluded = controller.useMemo(s => s.goodsListState.isTaxIncluded, [])
20
+
21
+ const onClick = React.useCallback(async () => {
22
+ await controller.saveEditGood();
23
+ await controller.wait();
24
+ if (controller.state.goodsListState.editGood) {
25
+ message.error({
26
+ content: '你正在编辑一个货物',
27
+ key: '你正在编辑一个货物',
28
+ });
29
+ return;
30
+ }
31
+ }, [])
32
+
33
+ React.useEffect(() => {
34
+ controller.run(async s => {
35
+ s.goodsListState.searchValue = value.trim();
36
+ })
37
+ }, [value, controller])
38
+
39
+ return (
40
+ <Input
41
+ size="small"
42
+ readOnly={readOnly}
43
+ value={value}
44
+ className="kts-invoice-operate-goods-list-search"
45
+ placeholder={`请您输入${columnshide.includes('itemCode') ? '' : '商品编码、'}项目名称、规格型号、金额(${isTaxIncluded ? '含税' : '不含税'})搜索`}
46
+ prefix={<Icon component={MagnifierSvg} style={{ color: "#b8b8b8" }} />}
47
+ onChange={e => { setValue(e.target.value); }}
48
+ onClick={onClick}
49
+ />
50
+ )
51
+ }
52
+