Blame view

src/pages/Order/OrderWarning/components/FinancialDrawer.tsx 7.73 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

      {invoicingStatus !== 'UN_INVOICE'
        ? [
boyang authored
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
          <ProFormDatePicker
            key="invoicingTime"
            width="lg"
            name="invoicingTime"
            label="开票时间"
            disabled={isEdit}
            rules={[
              { required: !isEdit ? true : false, message: '这是必填项' },
            ]}
            initialValue={subOrders[0]?.invoicingTime}
          />,
          <ProFormText
            key="purchaser"
            width="lg"
            name="purchaser"
            label="抬头名称"
            disabled={isEdit}
            rules={[
              { required: !isEdit ? true : false, message: '这是必填项' },
            ]}
            initialValue={subOrders[0]?.purchaser}
          />,
          <ProFormDatePicker
            key="financialReceiptIssuanceTime"
            width="lg"
            name="financialReceiptIssuanceTime"
            label="开收据时间"
            initialValue={subOrders[0]?.financialReceiptIssuanceTime}
          />,
          <ProFormDatePicker
            key="collectMoneyTime"
            width="lg"
            name="collectMoneyTime"
            label="收款时间"
            initialValue={subOrders[0]?.collectMoneyTime}
          />,
          <ProFormText
            width="lg"
            key="invoiceNumber"
            name="invoiceNumber"
            label="发票号码"
            initialValue={subOrders[0]?.invoiceNumber}
            rules={[{ required: true, message: '发票号码必填' }]}
          />,
          <div
            key="salesChooseReceivingCompany"
            hidden={subOrders[0].receivingCompany === null}
          >
            <span className={'pl-2 text-xs text-gray-400'}>
              销售申请开票时选择了:
              {enumValueToLabel(
                subOrders[0].receivingCompany,
                getReceivingCompanyOptions(PAYEE_OPTIONS),
              )}
            </span>
            <span
              hidden={subOrders[0].receivingCompany === 'ANY'}
              className={
                'pl-2 text-xs text-[#1677ff] cursor-pointer hover:text-[#64abf7]'
              }
              onClick={() => {
                chooseReceivingCompany(subOrders[0].receivingCompany);
              }}
zhongnanhuang authored
210
            >
boyang authored
211
212
213
214
215
216
217
218
219
220
221
222
223
224
              选择
            </span>
          </div>,
          <ProFormSelect
            key="payee"
            placeholder="选择收款单位"
            name="payee"
            width="lg"
            showSearch
            label="收款单位"
            options={enumToSelect(PAYEE_OPTIONS)}
            initialValue={subOrders[0]?.payee}
            rules={[{ required: true, message: '收款单位必填' }]}
          />,
225
boyang authored
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
          <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
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>
  );
};