Commit b6fd460776e92cae8918e8296b0f622b72e7e228

Authored by 曾国涛
1 parent 3c8b3518

Merge branch 'master' of http://39.108.227.113:8001/zhusen/canrd-erp-front

# Conflicts:
#	src/services/request.ts组件进行了条件渲染优化,以确保在有课题组ID的情况下才渲染成员添加相关的UI组件。

另外,对definition.ts文件中的OrderStagesCheckDo和OrderStagesSelDo接口进行了数据类型调整,以适配新的业务需求。

BREAKING CHANGE: 现在添加课题组成员时需要提供课题组ID,相关组件在没有课题组ID的情况下将不会渲染成员添加选项。
src/pages/Invoice/Invoice/components/InvoiceDetailImportModal.tsx deleted 100644 → 0
1 -import { RESPONSE_CODE } from '@/constants/enum';  
2 -import { postServiceInvoiceImportInvoiceDetails } from '@/services';  
3 -import { ModalForm, ProFormUploadDragger } from '@ant-design/pro-components';  
4 -import { Button, Form, message } from 'antd';  
5 -  
6 -export default ({ recordId }) => {  
7 - const [form] = Form.useForm();  
8 - return (  
9 - <ModalForm  
10 - title="新建表单"  
11 - trigger={<Button type="primary">导入明细</Button>}  
12 - form={form}  
13 - autoFocusFirstInput  
14 - modalProps={{  
15 - destroyOnClose: true,  
16 - onCancel: () => console.log('run'),  
17 - }}  
18 - submitTimeout={2000}  
19 - onFinish={async (values) => {  
20 - const formData = new FormData();  
21 - // console.log(fileList[0] as RcFile)  
22 - // formData.append('file', fileList[0] as RcFile);  
23 - formData.append('invoiceRecordId', recordId);  
24 - formData.append('detailsExcel', values.detailsExcel[0].originFileObj);  
25 - // You can use any AJAX library you like  
26 - const res = await postServiceInvoiceImportInvoiceDetails({  
27 - data: formData,  
28 - headers: {  
29 - 'Content-Type':  
30 - 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',  
31 - },  
32 - });  
33 - if (res.result === RESPONSE_CODE.SUCCESS) {  
34 - message.success('导入成功');  
35 - return true;  
36 - }  
37 - }}  
38 - >  
39 - <ProFormUploadDragger name="detailsExcel" label="导入明细表" />  
40 - </ModalForm>  
41 - );  
42 -};  
src/pages/Invoice/Invoice/components/InvoiceDetailTable.tsx deleted 100644 → 0
1 -import InvoiceDetailImportModal from '@/pages/Invoice/Invoice/components/InvoiceDetailImportModal';  
2 -import { InvoiceProjectSelect } from '@/pages/Invoice/Invoice/components/InvoiceProjectSelect';  
3 -import {  
4 - ActionType,  
5 - EditableProTable,  
6 - ProCard,  
7 - ProColumns,  
8 - ProFormField,  
9 -} from '@ant-design/pro-components';  
10 -import { useEffect, useRef, useState } from 'react';  
11 -  
12 -export default ({ recordId, details, updateDetails, readOnly }) => {  
13 - const [editableKeys, setEditableRowKeys] = useState([]);  
14 - const ref = useRef<ActionType>();  
15 - useEffect(() => {  
16 - updateDetails(details);  
17 - }, []);  
18 -  
19 - useEffect(() => {  
20 - setEditableRowKeys(details?.map((item) => item.tid));  
21 - }, [details]);  
22 - const columns: ProColumns[] = [  
23 - {  
24 - title: '项目名称',  
25 - dataIndex: 'projectName',  
26 - width: 200,  
27 - ellipsis: true,  
28 - readonly: readOnly,  
29 - renderFormItem: () => {  
30 - return <InvoiceProjectSelect readOnly={readOnly} />;  
31 - },  
32 - },  
33 - {  
34 - title: '规格型号',  
35 - readonly: readOnly,  
36 - dataIndex: 'specification',  
37 - valueType: 'text',  
38 - ellipsis: true,  
39 - },  
40 - {  
41 - title: '单位',  
42 - readonly: readOnly,  
43 - dataIndex: 'unit',  
44 - valueType: 'text',  
45 - ellipsis: true,  
46 - },  
47 - {  
48 - title: '数量',  
49 - readonly: readOnly,  
50 - dataIndex: 'quantity',  
51 - valueType: 'digit',  
52 - ellipsis: true,  
53 - },  
54 - {  
55 - title: '单价',  
56 - readonly: readOnly,  
57 - dataIndex: 'price',  
58 - valueType: 'digit',  
59 - ellipsis: true,  
60 - },  
61 - {  
62 - title: '金额',  
63 - readonly: readOnly,  
64 - dataIndex: 'totalPrice',  
65 - valueType: 'digit',  
66 - ellipsis: true,  
67 - },  
68 - {  
69 - title: '税率/征收率',  
70 - readonly: true,  
71 - dataIndex: 'taxRate',  
72 - valueType: () => ({  
73 - type: 'percent',  
74 - }),  
75 - ellipsis: true,  
76 - },  
77 - {  
78 - title: '税额',  
79 - readonly: true,  
80 - dataIndex: 'taxPrice',  
81 - valueType: 'digit',  
82 - ellipsis: true,  
83 - },  
84 - {  
85 - title: '操作',  
86 - valueType: 'option',  
87 - width: 100,  
88 - render: () => {  
89 - return null;  
90 - },  
91 - },  
92 - ];  
93 -  
94 - return (  
95 - <>  
96 - <EditableProTable  
97 - columns={columns}  
98 - actionRef={ref}  
99 - rowKey="tid"  
100 - scroll={{  
101 - x: 960,  
102 - }}  
103 - value={details}  
104 - controlled={true}  
105 - recordCreatorProps={  
106 - readOnly  
107 - ? false  
108 - : {  
109 - newRecordType: 'dataSource',  
110 - record: () => ({  
111 - tid: Date.now(),  
112 - }),  
113 - }  
114 - }  
115 - toolBarRender={() => {  
116 - return [  
117 - <InvoiceDetailImportModal key={'import'} recordId={recordId} />,  
118 - ];  
119 - }}  
120 - editable={{  
121 - type: 'multiple',  
122 - editableKeys,  
123 - actionRender: (row, config, defaultDoms) => {  
124 - return [defaultDoms.delete];  
125 - },  
126 -  
127 - onValuesChange: (record, recordList) => {  
128 - //修改recordList中tid为record.tid的元素,将它的specification属性设置为invoiceProject的specification属性  
129 - const records = recordList.map((item) => {  
130 - return item;  
131 - });  
132 - updateDetails(records);  
133 - },  
134 - }}  
135 - />  
136 - {  
137 - <ProCard title="表格数据" headerBordered collapsible defaultCollapsed>  
138 - <ProFormField  
139 - ignoreFormItem  
140 - fieldProps={{  
141 - style: {  
142 - width: '100%',  
143 - },  
144 - }}  
145 - mode="read"  
146 - valueType="jsonCode"  
147 - text={JSON.stringify(details)}  
148 - />  
149 - </ProCard>  
150 - }  
151 - </>  
152 - );  
153 -};  
src/pages/Invoice/Invoice/components/InvoiceProjectSelect.tsx deleted 100644 → 0
1 -import { postServiceConstListInvoiceDetailNames } from '@/services';  
2 -import { Select, Tooltip } from 'antd';  
3 -import { useState } from 'react';  
4 -  
5 -export const InvoiceProjectSelect = ({ readOnly, value, onChange }) => {  
6 - const [options, setOptions] = useState<any[]>([]);  
7 - // 定义防抖函数  
8 - let timeoutId = null;  
9 - const fetchOptions = async (keywords) => {  
10 - clearTimeout(timeoutId);  
11 - timeoutId = setTimeout(async () => {  
12 - const res = await postServiceConstListInvoiceDetailNames({  
13 - data: {  
14 - nameLike: keywords,  
15 - },  
16 - });  
17 - const data = res.data;  
18 -  
19 - setOptions(  
20 - data.map((item) => {  
21 - console.log(item);  
22 - return {  
23 - key: item.id,  
24 - label:  
25 - '*' +  
26 - item.productAndServiceCatagoryAbbreviation +  
27 - '*' +  
28 - item?.name,  
29 - value:  
30 - '*' +  
31 - item.productAndServiceCatagoryAbbreviation +  
32 - '*' +  
33 - item?.name,  
34 - ...item,  
35 - };  
36 - }),  
37 - );  
38 - // 这里可以放置实际的搜索逻辑,比如发起网络请求等  
39 - }, 500); // 设置延迟时间,单位毫秒  
40 - };  
41 -  
42 - return readOnly ? (  
43 - <Tooltip title={value}>{value}</Tooltip>  
44 - ) : (  
45 - <Select  
46 - key="project"  
47 - /*readonly={readonly}*/  
48 - showSearch  
49 - placeholder="请选择开票项目"  
50 - filterOption={(input, option) => (option?.label ?? '').includes(input)}  
51 - onChange={(e) => {  
52 - onChange(e);  
53 - }}  
54 - defaultValue={value}  
55 - options={options}  
56 - onSearch={(e) => {  
57 - fetchOptions(e);  
58 - }}  
59 - />  
60 - );  
61 -};  
src/pages/Invoice/Invoice/components/invoiceWriteOffModal.tsx 0 → 100644
  1 +import {
  2 + EditableFormInstance,
  3 + EditableProTable,
  4 + ModalForm,
  5 + ProCard,
  6 + ProColumns,
  7 + ProForm,
  8 + ProFormDependency,
  9 + ProFormField,
  10 + ProFormInstance,
  11 + ProFormSwitch,
  12 +} from '@ant-design/pro-components';
  13 +import { Button } from 'antd';
  14 +import React, { useRef, useState } from 'react';
  15 +
  16 +type DataSourceType = {
  17 + id: React.Key;
  18 + title?: string;
  19 + decs?: string;
  20 + state?: string;
  21 + created_at?: number;
  22 + update_at?: number;
  23 + children?: DataSourceType[];
  24 +};
  25 +
  26 +const defaultData: DataSourceType[] = [
  27 + {
  28 + id: '624748504',
  29 + title: '活动名称一',
  30 + decs: '这个活动真好玩',
  31 + state: 'open',
  32 + created_at: 1590486176000,
  33 + update_at: 1590486176000,
  34 + },
  35 + {
  36 + id: '624691229',
  37 + title: '活动名称二',
  38 + decs: '这个活动真好玩',
  39 + state: 'closed',
  40 + created_at: 1590481162000,
  41 + update_at: 1590481162000,
  42 + },
  43 +];
  44 +
  45 +let i = 0;
  46 +
  47 +export default () => {
  48 + const [editableKeys, setEditableRowKeys] = useState<React.Key[]>(() => []);
  49 + const [controlled, setControlled] = useState<boolean>(false);
  50 + const formRef = useRef<ProFormInstance<any>>();
  51 + const editorFormRef = useRef<EditableFormInstance<DataSourceType>>();
  52 + const columns: ProColumns<DataSourceType>[] = [
  53 + {
  54 + title: '活动名称',
  55 + dataIndex: 'title',
  56 + formItemProps: () => {
  57 + return {
  58 + rules: [{ required: true, message: '此项为必填项' }],
  59 + };
  60 + },
  61 + },
  62 + {
  63 + title: '状态',
  64 + key: 'state',
  65 + dataIndex: 'state',
  66 + valueType: 'select',
  67 + valueEnum: {
  68 + all: { text: '全部', status: 'Default' },
  69 + open: {
  70 + text: '未解决',
  71 + status: 'Error',
  72 + },
  73 + closed: {
  74 + text: '已解决',
  75 + status: 'Success',
  76 + },
  77 + },
  78 + },
  79 + {
  80 + title: '描述',
  81 + dataIndex: 'decs',
  82 + },
  83 + {
  84 + title: '活动时间',
  85 + dataIndex: 'created_at',
  86 + valueType: 'date',
  87 + },
  88 + {
  89 + title: '操作',
  90 + valueType: 'option',
  91 + width: 200,
  92 + render: (text, record, _, action) => [
  93 + <a
  94 + key="editable"
  95 + onClick={() => {
  96 + action?.startEditable?.(record.id, record);
  97 + }}
  98 + >
  99 + 编辑
  100 + </a>,
  101 + <a
  102 + key="delete"
  103 + onClick={() => {
  104 + const tableDataSource = formRef.current?.getFieldValue(
  105 + 'table',
  106 + ) as DataSourceType[];
  107 + formRef.current?.setFieldsValue({
  108 + table: tableDataSource.filter((item) => item.id !== record.id),
  109 + });
  110 + }}
  111 + >
  112 + 删除
  113 + </a>,
  114 + ],
  115 + },
  116 + ];
  117 +
  118 + return (
  119 + <ModalForm
  120 + formRef={formRef}
  121 + initialValues={{
  122 + table: defaultData,
  123 + }}
  124 + trigger={<Button type="primary">核销</Button>}
  125 + validateTrigger="onBlur"
  126 + >
  127 + <EditableProTable<DataSourceType>
  128 + rowKey="id"
  129 + scroll={{
  130 + x: 960,
  131 + }}
  132 + editableFormRef={editorFormRef}
  133 + headerTitle="可编辑表格"
  134 + maxLength={5}
  135 + name="table"
  136 + controlled={controlled}
  137 + recordCreatorProps={false}
  138 + toolBarRender={() => [
  139 + <ProFormSwitch
  140 + key="render"
  141 + fieldProps={{
  142 + style: {
  143 + marginBlockEnd: 0,
  144 + },
  145 + checked: controlled,
  146 + onChange: (value) => {
  147 + setControlled(value);
  148 + },
  149 + }}
  150 + checkedChildren="数据更新通知 Form"
  151 + unCheckedChildren="保存后通知 Form"
  152 + noStyle
  153 + />,
  154 + <Button
  155 + key="rows"
  156 + onClick={() => {
  157 + const rows = editorFormRef.current?.getRowsData?.();
  158 + console.log(rows);
  159 + }}
  160 + >
  161 + 获取 table 的数据
  162 + </Button>,
  163 + ]}
  164 + columns={columns}
  165 + editable={{
  166 + type: 'multiple',
  167 + editableKeys,
  168 + onChange: setEditableRowKeys,
  169 + actionRender: (row, config, defaultDom) => {
  170 + return [
  171 + defaultDom.save,
  172 + defaultDom.delete,
  173 + defaultDom.cancel,
  174 + <a
  175 + key="set"
  176 + onClick={() => {
  177 + console.log(config.index);
  178 + i++;
  179 + editorFormRef.current?.setRowData?.(config.index!, {
  180 + title: '动态设置的title' + i,
  181 + });
  182 + }}
  183 + >
  184 + 动态设置此项
  185 + </a>,
  186 + ];
  187 + },
  188 + }}
  189 + />
  190 + <ProForm.Item>
  191 + <ProCard title="表格数据" headerBordered collapsible defaultCollapsed>
  192 + <ProFormDependency name={['table']}>
  193 + {({ table }) => {
  194 + return (
  195 + <ProFormField
  196 + ignoreFormItem
  197 + fieldProps={{
  198 + style: {
  199 + width: '100%',
  200 + },
  201 + }}
  202 + mode="read"
  203 + valueType="jsonCode"
  204 + text={JSON.stringify(table)}
  205 + />
  206 + );
  207 + }}
  208 + </ProFormDependency>
  209 + </ProCard>
  210 + </ProForm.Item>
  211 + </ModalForm>
  212 + );
  213 +};
src/pages/Invoice/Invoice/index.tsx
@@ -3,6 +3,7 @@ import EllipsisDiv from &#39;@/components/Div/EllipsisDiv&#39;; @@ -3,6 +3,7 @@ import EllipsisDiv from &#39;@/components/Div/EllipsisDiv&#39;;
3 import AddInvoiceDrawerForm from '@/pages/Invoice/Invoice/components/AddInvoiceDrawerForm'; 3 import AddInvoiceDrawerForm from '@/pages/Invoice/Invoice/components/AddInvoiceDrawerForm';
4 import BankImportModal from '@/pages/Invoice/Invoice/components/BankImportModal'; 4 import BankImportModal from '@/pages/Invoice/Invoice/components/BankImportModal';
5 import InvoiceVerificationModal from '@/pages/Invoice/Invoice/components/InvoiceVerificationModal'; 5 import InvoiceVerificationModal from '@/pages/Invoice/Invoice/components/InvoiceVerificationModal';
  6 +import InvoiceWriteOffModal from '@/pages/Invoice/Invoice/components/invoiceWriteOffModal';
6 import { INVOICE_COLUMNS } from '@/pages/Invoice/constant'; 7 import { INVOICE_COLUMNS } from '@/pages/Invoice/constant';
7 import { INVOCING_STATUS, PAYEE_OPTIONS } from '@/pages/Order/constant'; 8 import { INVOCING_STATUS, PAYEE_OPTIONS } from '@/pages/Order/constant';
8 import { 9 import {
@@ -206,6 +207,7 @@ const InvoiceRecord = () =&gt; { @@ -206,6 +207,7 @@ const InvoiceRecord = () =&gt; {
206 }} 207 }}
207 key="add" 208 key="add"
208 ></AddInvoiceDrawerForm>, 209 ></AddInvoiceDrawerForm>,
  210 + <InvoiceWriteOffModal key="writeOff" />,
209 ]} 211 ]}
210 /> 212 />
211 213
src/pages/Invoice/InvoiceVerification/components/AddInvoiceDrawerForm.tsx deleted 100644 → 0
1 -import { RESPONSE_CODE } from '@/constants/enum';  
2 -import { PAYEE_OPTIONS } from '@/pages/Order/constant';  
3 -import {  
4 - postServiceInvoiceAddInvoice,  
5 - postServiceOrderQuerySalesCode,  
6 -} from '@/services';  
7 -import { enumToSelect } from '@/utils';  
8 -import { PlusOutlined } from '@ant-design/icons';  
9 -import {  
10 - DrawerForm,  
11 - ProFormDateTimePicker,  
12 - ProFormGroup,  
13 - ProFormList,  
14 - ProFormMoney,  
15 - ProFormSelect,  
16 - ProFormText,  
17 - ProFormTextArea,  
18 -} from '@ant-design/pro-components';  
19 -import { Button, Form, message } from 'antd';  
20 -import { useEffect, useState } from 'react';  
21 -  
22 -export default ({ onClose }) => {  
23 - const [form] = Form.useForm<{  
24 - invoiceNumber: '';  
25 - invoiceStatus: '';  
26 - purchaser: '';  
27 - payee: '';  
28 - contacts: '';  
29 - sale: '';  
30 - invoicingTime: '';  
31 - notes: '';  
32 - mainOrderIdObjs: [  
33 - {  
34 - mainOrderId: '';  
35 - },  
36 - ];  
37 - money: '';  
38 - }>();  
39 - const [salesCodeOptions, setSalesCodeOptions] = useState([]);  
40 - const getSalesCodeOptions = async () => {  
41 - const res = await postServiceOrderQuerySalesCode();  
42 - let options = res.data?.map((item) => {  
43 - return {  
44 - label: item.userName,  
45 - value: item.userName,  
46 - number: item.number,  
47 - };  
48 - });  
49 - setSalesCodeOptions(options);  
50 - };  
51 - useEffect(() => {  
52 - getSalesCodeOptions();  
53 - }, []);  
54 - return (  
55 - <DrawerForm<{  
56 - invoiceNumber: string;  
57 - invoiceStatus: string;  
58 - purchaser: string;  
59 - payee: string;  
60 - contacts: string;  
61 - sale: string;  
62 - invoicingTime: Date;  
63 - notes: string;  
64 - mainOrderIdObjs: [  
65 - {  
66 - mainOrderId: string;  
67 - },  
68 - ];  
69 - money: string;  
70 - }>  
71 - title="新增开票"  
72 - resize={{  
73 - onResize() {  
74 - console.log('resize!');  
75 - },  
76 - maxWidth: window.innerWidth * 0.8,  
77 - minWidth: 500,  
78 - }}  
79 - form={form}  
80 - trigger={  
81 - <Button type="primary">  
82 - <PlusOutlined />  
83 - 新增  
84 - </Button>  
85 - }  
86 - autoFocusFirstInput  
87 - drawerProps={{  
88 - destroyOnClose: true,  
89 - }}  
90 - submitTimeout={2000}  
91 - onFinish={async (values) => {  
92 - console.log(values);  
93 - const mainOrderIds = values.mainOrderIdObjs.flatMap(  
94 - (item) => item.mainOrderId,  
95 - );  
96 - let attrs = { ...values, mainOrderIds };  
97 - let res = await postServiceInvoiceAddInvoice({  
98 - data: { ...attrs },  
99 - });  
100 - if (res.result === RESPONSE_CODE.SUCCESS) {  
101 - message.success(res.message);  
102 - } else {  
103 - message.error(res.message);  
104 - return false;  
105 - }  
106 - onClose();  
107 - // 不返回不会关闭弹框  
108 - return true;  
109 - }}  
110 - >  
111 - <ProFormText  
112 - name="invoiceNumber"  
113 - width="md"  
114 - label="发票号码"  
115 - placeholder="请输入名称"  
116 - rules={[{ required: true, message: '请输入名称!' }]}  
117 - />  
118 - <ProFormSelect  
119 - name="invoiceStatus"  
120 - label="发票类型"  
121 - valueEnum={{  
122 - SPECIALLY_INVOICED: '专票',  
123 - COMMON_INVOICED: '普票',  
124 - }}  
125 - rules={[{ required: true, message: '请选择发票类型!' }]}  
126 - />  
127 - <ProFormText  
128 - name="purchaser"  
129 - width="md"  
130 - label="购买方"  
131 - placeholder="请输入购买方"  
132 - rules={[{ required: true, message: '请输入购买方!' }]}  
133 - />  
134 - <ProFormSelect  
135 - placeholder="收款单位"  
136 - name="payee"  
137 - width="lg"  
138 - key="payee"  
139 - showSearch  
140 - label="开票收款单位"  
141 - tooltip="财务开票将依据这个字段,选择对应的公司开票"  
142 - options={enumToSelect(PAYEE_OPTIONS)}  
143 - />  
144 - <ProFormText  
145 - name="contacts"  
146 - width="md"  
147 - label="联系人"  
148 - placeholder="请输入联系人"  
149 - rules={[{ required: true, message: '请输入联系人!' }]}  
150 - />  
151 - <ProFormSelect  
152 - name="sale"  
153 - key="sale"  
154 - width="lg"  
155 - showSearch  
156 - label="销售代表"  
157 - placeholder="请选择销售代表"  
158 - options={salesCodeOptions}  
159 - />  
160 - <ProFormDateTimePicker  
161 - name="invoicingTime"  
162 - label="开票时间"  
163 - fieldProps={{  
164 - format: (value) => value.format('YYYY-MM-DD'),  
165 - }}  
166 - rules={[{ required: true, message: '请输入开票时间!' }]}  
167 - />  
168 - <ProFormTextArea name="notes" label="备注" placeholder="请输入名称" />  
169 - <ProFormList  
170 - name="mainOrderIdObjs"  
171 - label="订单号"  
172 - min={1}  
173 - copyIconProps={false}  
174 - deleteIconProps={{  
175 - tooltipText: '删除',  
176 - }}  
177 - initialValue={[  
178 - {  
179 - mainOrderId: '',  
180 - },  
181 - ]}  
182 - >  
183 - <ProFormGroup key="group">  
184 - <ProFormText  
185 - rules={[{ required: true, message: '请输入关联订单!' }]}  
186 - name="mainOrderId"  
187 - />  
188 - </ProFormGroup>  
189 - </ProFormList>  
190 - <ProFormMoney  
191 - label="金额"  
192 - name="money"  
193 - customSymbol="¥"  
194 - min={0}  
195 - rules={[{ required: true, message: '请输入金额!' }]}  
196 - />  
197 - </DrawerForm>  
198 - );  
199 -};  
src/pages/Invoice/InvoiceVerification/components/InvoicingModal.tsx deleted 100644 → 0
1 -import { RESPONSE_CODE } from '@/constants/enum';  
2 -import { postServiceInvoiceInvoicing } from '@/services';  
3 -import { ModalForm } from '@ant-design/pro-components';  
4 -import { Button, Form, message } from 'antd';  
5 -  
6 -export default ({ selectedRowKeys, reloadRecordTable }) => {  
7 - const [form] = Form.useForm<{ name: string; company: string }>();  
8 - return (  
9 - <ModalForm<{  
10 - name: string;  
11 - company: string;  
12 - }>  
13 - title="开票"  
14 - trigger={  
15 - <Button type="primary" disabled={selectedRowKeys?.length === 0}>  
16 - 开票  
17 - </Button>  
18 - }  
19 - form={form}  
20 - autoFocusFirstInput  
21 - modalProps={{  
22 - destroyOnClose: true,  
23 - onCancel: () => console.log('run'),  
24 - }}  
25 - submitTimeout={2000}  
26 - onFinish={async (values) => {  
27 - let res = await postServiceInvoiceInvoicing({  
28 - data: {  
29 - ...values,  
30 - invoiceRecordIds: selectedRowKeys,  
31 - },  
32 - });  
33 - if (res.result === RESPONSE_CODE.SUCCESS) {  
34 - message.success(res.message);  
35 - }  
36 - reloadRecordTable();  
37 - message.success('提交成功');  
38 - return true;  
39 - }}  
40 - >  
41 - {/*<ProFormSelect  
42 - name="invoicingAccount"  
43 - label="开票账号"  
44 - request={async () => {  
45 - const res = await postServiceInvoiceGetInvoicingAccount();  
46 - return res.data.map((item) => {  
47 - return {  
48 - label: item.accountText,  
49 - value: item.account,  
50 - };  
51 - });  
52 - }}  
53 - placeholder="请选择开票账号"  
54 - rules={[{ required: true, message: '请选择开票账号!' }]}  
55 - />*/}  
56 - </ModalForm>  
57 - );  
58 -};  
src/pages/Invoice/InvoiceVerification/components/ManualInvoicingModal.tsx deleted 100644 → 0
1 -import { RESPONSE_CODE } from '@/constants/enum';  
2 -import UploadC from '@/pages/Invoice/InvoiceVerification/components/UploadSingleImg';  
3 -import {  
4 - postOrderErpOrderStagesUpload,  
5 - postServiceInvoiceDealInvoicingResult,  
6 -} from '@/services';  
7 -import {  
8 - ModalForm,  
9 - ProFormDatePicker,  
10 - ProFormText,  
11 -} from '@ant-design/pro-components';  
12 -import { Col, Form, Row, message } from 'antd';  
13 -import { RcFile } from 'antd/es/upload';  
14 -import { useEffect } from 'react';  
15 -  
16 -export default ({ record }) => {  
17 - useEffect(() => {  
18 - console.log('invoicing');  
19 - }, []);  
20 - const [form] = Form.useForm();  
21 - return (  
22 - <ModalForm  
23 - title="手动开票"  
24 - trigger={<a type="primary">手动开票</a>}  
25 - width={600}  
26 - layout={'horizontal'}  
27 - form={form}  
28 - autoFocusFirstInput  
29 - modalProps={{  
30 - destroyOnClose: true,  
31 - onCancel: () => console.log('run'),  
32 - }}  
33 - submitTimeout={2000}  
34 - onFinish={async (values) => {  
35 - const res = await postServiceInvoiceDealInvoicingResult({  
36 - data: {  
37 - ...values,  
38 - isSuccess: true,  
39 - invoiceRecordId: record.id,  
40 - manual: true,  
41 - },  
42 - });  
43 - if (res.result === RESPONSE_CODE.SUCCESS) {  
44 - message.success('开票成功');  
45 - return true;  
46 - } else {  
47 - message.error('开票失败');  
48 - }  
49 - }}  
50 - >  
51 - {/*<ProFormText  
52 - rules={[{ required: true, message: '此项为必填项' }]}  
53 - width={'md'}  
54 - name="invoicingPerson"  
55 - label="开票人"  
56 - />*/}  
57 - <ProFormText  
58 - rules={[{ required: true, message: '此项为必填项' }]}  
59 - width={'md'}  
60 - name="invoiceNumber"  
61 - label="发票号码"  
62 - />  
63 - <ProFormDatePicker  
64 - rules={[{ required: true, message: '此项为必填项' }]}  
65 - fieldProps={{  
66 - format: 'YYYY-MM-DD',  
67 - }}  
68 - name="invoicingDate"  
69 - label="开票日期"  
70 - />  
71 - <ProFormText  
72 - rules={[{ required: true, message: '发票必须上传' }]}  
73 - hidden  
74 - name="url"  
75 - label="發票地址"  
76 - />  
77 - <Row>  
78 - <Col span={4}>上传发票</Col>  
79 - <Col span={20}>  
80 - <UploadC  
81 - onFilesChange={async (newFileList) => {  
82 - if (newFileList.length > 0) {  
83 - const formData = new FormData();  
84 - formData.append('file', newFileList[0].originFileObj as RcFile);  
85 - const res = await postOrderErpOrderStagesUpload({  
86 - data: formData,  
87 - headers: {  
88 - 'Content-Type':  
89 - 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',  
90 - },  
91 - });  
92 - const url = res.data;  
93 - form.setFieldValue('url', url);  
94 - } else {  
95 - form.setFieldValue('url', null);  
96 - }  
97 - }}  
98 - ></UploadC>  
99 - </Col>  
100 - </Row>  
101 - {/*<ProFormList  
102 - name="invoiceDetailDtoList"  
103 - label="明细"  
104 - creatorButtonProps={false}  
105 - copyIconProps={false}  
106 - itemRender={({ listDom }, { index }) => (  
107 - <ProCard  
108 - bordered  
109 - style={{ marginBlockEnd: 8 }}  
110 - title={`明细${index + 1}`}  
111 - bodyStyle={{ paddingBlockEnd: 0 }}  
112 - >  
113 - {listDom}  
114 - </ProCard>  
115 - )}  
116 - creatorRecord={{ name: '', items: [{ name: '' }] }}  
117 - initialValue={record.invoiceDetails}  
118 - >  
119 - <ProFormText  
120 - name="projectName"  
121 - label="名称"  
122 - placeholder="请输入名称"  
123 - readonly  
124 - />  
125 - <ProFormDigit label="税率" name="taxRate" min={0} max={100} />  
126 - <ProFormMoney label="税额" name="taxPrice" locale="zh-CN" min={0} />  
127 - </ProFormList>*/}  
128 - </ModalForm>  
129 - );  
130 -};