Blame view

src/pages/Order/OrderWarning/components/FinancialDrawer.tsx 7.92 KB
1
2
3
4
5
import { RESPONSE_CODE } from '@/constants/enum';
import {
  postServiceOrderEditOrder,
  postServiceOrderInvoicing,
} from '@/services';
zhongnanhuang authored
6
import { FloatAdd, enumToSelect, enumValueToLabel } from '@/utils';
zhongnanhuang authored
7
import { getReceivingCompanyOptions } from '@/utils/order';
8
9
10
import {
  DrawerForm,
  ProFormDatePicker,
zhongnanhuang authored
11
  ProFormDigit,
zhongnanhuang authored
12
  ProFormSelect,
13
  ProFormText,
zhongnanhuang authored
14
  ProFormTextArea,
15
} from '@ant-design/pro-components';
zhongnanhuang authored
16
import { Button, Form, message } from 'antd';
zhongnanhuang authored
17
import { useEffect, useState } from 'react';
boyang authored
18
import { INVOCING_STATUS_OPTIONS_OLD, PAYEE_OPTIONS } from '../../constant';
19
zhongnanhuang authored
20
21
22
23
24
25
26
27
export default ({
  mainOrder,
  subOrders,
  isEdit,
  isMainOrder,
  cancel,
  onClose,
}) => {
zhongnanhuang authored
28
  const [invoicingStatus, setInvoicingStatus] = useState('');
29
  const subIds = subOrders.map((item) => item.id);
zhongnanhuang authored
30
31
32
  useEffect(() => {
    // 在组件挂载或数据变化时,更新组件状态
    if (mainOrder) {
zhongnanhuang authored
33
      setInvoicingStatus(subOrders[0]?.invoicingStatus);
zhongnanhuang authored
34
35
    }
  }, [mainOrder]);
36
37
38
  useEffect(() => {
    console.log(JSON.stringify(subOrders));
  }, []);
zhongnanhuang authored
39
zhongnanhuang authored
40
  const [form] = Form.useForm<{ name: string; company: string }>();
zhongnanhuang authored
41
42
43
44
45
46
47
48
49

  /**
   * 自动选择收款公司
   * @param receivingCompany
   */
  function chooseReceivingCompany(receivingCompany: any) {
    form.setFieldValue('payee', receivingCompany);
  }
zhongnanhuang authored
50
51
52
53
54
55
56
57
58
  /**
   * 计算选中子订单的主订单金额之和
   */
  function computeTotalPayment() {
    let distinctMap = new Map();

    subOrders?.forEach((item: any) => {
      distinctMap.set(item.mainOrderId, item.totalPayment);
    });
zhongnanhuang authored
59
zhongnanhuang authored
60
61
62
63
64
65
66
67
    let sum = 0;
    for (let p of distinctMap.values()) {
      sum = FloatAdd(p, sum);
    }

    form.setFieldValue('money', sum);
  }
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  return (
    <DrawerForm<{
      name: string;
      company: string;
    }>
      open
      title="财务信息"
      resize={{
        onResize() {
          console.log('resize!');
        },
        maxWidth: window.innerWidth * 0.8,
        minWidth: 400,
      }}
zhongnanhuang authored
82
      initialValues={mainOrder}
83
84
85
86
87
88
      form={form}
      autoFocusFirstInput
      drawerProps={{
        destroyOnClose: true,
      }}
      submitTimeout={2000}
89
      onFinish={async (values) => {
90
        let res;
91
92
        let body = values;
        body.subIds = subIds;
93
94
95
96
97
98
99
100
101
        if (isEdit) {
          res = await postServiceOrderEditOrder({ data: body });
        } else {
          res = await postServiceOrderInvoicing({ data: body });
        }
        if (res.result === RESPONSE_CODE.SUCCESS) {
          message.success(res.message);
          onClose();
        }
102
103
      }}
      onOpenChange={(val) => {
zhongnanhuang authored
104
        return !val && cancel();
105
106
      }}
    >
zhongnanhuang authored
107
108
109
110
111
112
113
114
      {isMainOrder ? (
        <ProFormSelect
          placeholder="选择是否需要开票"
          name="invoicingStatus"
          width="lg"
          label="是否需要开票"
          options={enumToSelect(INVOCING_STATUS_OPTIONS_OLD)}
          onChange={setInvoicingStatus}
zhongnanhuang authored
115
          initialValue={subOrders[0]?.invoicingStatus}
zhongnanhuang authored
116
117
118
119
120
121
122
          // disabled={mainInfoDisbled}
          rules={[{ required: true, message: '是否需要开票必填' }]}
        />
      ) : (
        ''
      )}
123
      <ProFormTextArea
124
        width="lg"
zhongnanhuang authored
125
        name="invoiceIdentificationNumber"
126
127
        label="开票信息"
        placeholder="请输入开票信息"
zhongnanhuang authored
128
        disabled
129
130
131
132
133
134
      />
      <ProFormText
        width="lg"
        name="bank"
        label="开户银行"
        placeholder="请输入开户银行"
zhongnanhuang authored
135
        disabled
136
137
138
139
140
141
      />
      <ProFormText
        width="lg"
        name="bankAccountNumber"
        label="开户银行账号"
        placeholder="请输入开户银行账号"
zhongnanhuang authored
142
        disabled
143
      />
zhongnanhuang authored
144
145
146
147
148
149
150
151
152
153
154
155

      {invoicingStatus !== 'UN_INVOICE'
        ? [
            <ProFormDatePicker
              key="invoicingTime"
              width="lg"
              name="invoicingTime"
              label="开票时间"
              disabled={isEdit}
              rules={[
                { required: !isEdit ? true : false, message: '这是必填项' },
              ]}
zhongnanhuang authored
156
              initialValue={subOrders[0]?.invoicingTime}
zhongnanhuang authored
157
            />,
158
159
160
161
162
163
164
165
166
167
168
            <ProFormText
              key="purchaser"
              width="lg"
              name="purchaser"
              label="抬头名称"
              disabled={isEdit}
              rules={[
                { required: !isEdit ? true : false, message: '这是必填项' },
              ]}
              initialValue={subOrders[0]?.purchaser}
            />,
zhongnanhuang authored
169
            <ProFormDatePicker
170
171
172
173
174
175
176
              key="financialReceiptIssuanceTime"
              width="lg"
              name="financialReceiptIssuanceTime"
              label="开收据时间"
              initialValue={subOrders[0]?.financialReceiptIssuanceTime}
            />,
            <ProFormDatePicker
zhongnanhuang authored
177
178
179
180
              key="collectMoneyTime"
              width="lg"
              name="collectMoneyTime"
              label="收款时间"
zhongnanhuang authored
181
              initialValue={subOrders[0]?.collectMoneyTime}
zhongnanhuang authored
182
            />,
zhongnanhuang authored
183
184
185
186
187
188
189
190
            <ProFormText
              width="lg"
              key="invoiceNumber"
              name="invoiceNumber"
              label="发票号码"
              initialValue={subOrders[0]?.invoiceNumber}
              rules={[{ required: true, message: '发票号码必填' }]}
            />,
zhongnanhuang authored
191
192
193
194
195
196
197
198
            <div
              key="salesChooseReceivingCompany"
              hidden={subOrders[0].receivingCompany === null}
            >
              <span className={'pl-2 text-xs text-gray-400'}>
                销售申请开票时选择了:
                {enumValueToLabel(
                  subOrders[0].receivingCompany,
zhongnanhuang authored
199
                  getReceivingCompanyOptions(PAYEE_OPTIONS),
zhongnanhuang authored
200
201
202
203
204
205
206
207
208
209
210
211
212
213
                )}
              </span>
              <span
                hidden={subOrders[0].receivingCompany === 'ANY'}
                className={
                  'pl-2 text-xs text-[#1677ff] cursor-pointer hover:text-[#64abf7]'
                }
                onClick={() => {
                  chooseReceivingCompany(subOrders[0].receivingCompany);
                }}
              >
                选择
              </span>
            </div>,
zhongnanhuang authored
214
215
216
217
218
            <ProFormSelect
              key="payee"
              placeholder="选择收款单位"
              name="payee"
              width="lg"
zhongnanhuang authored
219
              showSearch
zhongnanhuang authored
220
221
222
223
224
              label="收款单位"
              options={enumToSelect(PAYEE_OPTIONS)}
              initialValue={subOrders[0]?.payee}
              rules={[{ required: true, message: '收款单位必填' }]}
            />,
225
zhongnanhuang authored
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
            <div id="total-payment" key="money">
              <ProFormDigit
                key="money"
                name="money"
                width="lg"
                label="金额"
                rules={[{ required: true, message: '金额必填' }]}
                tooltip="点击计算,合计所有子订单对应主订单总额"
                fieldProps={{
                  addonAfter: (
                    <Button
                      className="rounded-l-none"
                      type="primary"
                      onClick={computeTotalPayment}
                    >
                      计算
                    </Button>
                  ),
                }}
              />
            </div>,
zhongnanhuang authored
247
248
          ]
        : ''}
zhongnanhuang authored
249
250
      <ProFormSelect
zhongnanhuang authored
251
        placeholder="是否完全开票"
252
        name="afterInvoicingStatus"
zhongnanhuang authored
253
254
        width="lg"
        label="是否完全开票"
255
256
        options={[
          { label: '完全开票', value: 'COMPLETE_INVOICING' },
257
          { label: '部分开票', value: 'PARTIAL_INVOICING' },
258
        ]}
zhongnanhuang authored
259
        // disabled={mainInfoDisbled}
260
261
        initialValue={
          subOrders[0]?.afterInvoicingStatus === 'APPLY_FOR_INVOICING'
262
            ? 'COMPLETE_INVOICING'
263
264
            : subOrders[0]?.afterInvoicingStatus
        }
265
266
        rules={[{ required: true, message: '是否完全开票必填' }]}
      />
zhongnanhuang authored
267
268
269
270
      <ProFormTextArea
        width="lg"
        name="invoicingNotes"
        label="备注"
zhongnanhuang authored
271
        initialValue={subOrders[0]?.invoicingNotes}
zhongnanhuang authored
272
      />
273
274
275
    </DrawerForm>
  );
};