Commit 533125578465ffd668f3116600dee6162fe16bf2
1 parent
49568dac
feat(Invoice): 为表格添加行选择功能并优化相关模型- 在 enum.ts 中添加了新的服务常量
- 在 InvoiceRecord 组件中实现了行选择功能- 添加了 ReissueModal 组件用于处理选中行的重新发行操作 - 优化了 waitProcessRecord 组件的代码结构
Showing
11 changed files
with
832 additions
and
67 deletions
.umirc.ts
... | ... | @@ -104,6 +104,12 @@ export default defineConfig({ |
104 | 104 | component: './Invoice/InvoiceVerification', |
105 | 105 | }, |
106 | 106 | { |
107 | + name: '重开发票记录', | |
108 | + path: 'reissueRecord', | |
109 | + icon: 'BookOutlined', | |
110 | + component: './Invoice/ReissueRecord', | |
111 | + }, | |
112 | + { | |
107 | 113 | name: '手动开票白名单', |
108 | 114 | path: 'OldInvoicingWhiteList', |
109 | 115 | icon: 'BookOutlined', | ... | ... |
src/models/enum.ts
1 | -import { postServiceConstPayees } from '@/services'; | |
1 | +import { | |
2 | + postServiceConstInvoiceFlushStatus, | |
3 | + postServiceConstInvoiceReissueRecordStatus, | |
4 | + postServiceConstPayees, | |
5 | +} from '@/services'; | |
2 | 6 | import { useCallback } from 'react'; |
3 | 7 | |
4 | 8 | export default () => { |
... | ... | @@ -6,5 +10,13 @@ export default () => { |
6 | 10 | const result = await postServiceConstPayees(); |
7 | 11 | return result.data; |
8 | 12 | }, []); |
9 | - return { getPayees }; | |
13 | + const getInvoiceReissueRecordStatus = useCallback(async () => { | |
14 | + const result = await postServiceConstInvoiceReissueRecordStatus(); | |
15 | + return result.data; | |
16 | + }, []); | |
17 | + const getInvoiceFlushStatus = useCallback(async () => { | |
18 | + const result = await postServiceConstInvoiceFlushStatus(); | |
19 | + return result.data; | |
20 | + }, []); | |
21 | + return { getPayees, getInvoiceReissueRecordStatus, getInvoiceFlushStatus }; | |
10 | 22 | }; | ... | ... |
src/pages/Invoice/Invoice/components/ReissueModal.tsx
0 → 100644
1 | +import { RESPONSE_CODE } from '@/constants/enum'; | |
2 | +import { postServiceInvoiceReissueInvoices } from '@/services'; | |
3 | +import { ModalForm, ProFormTextArea } from '@ant-design/pro-components'; | |
4 | +import { Button, Form, message } from 'antd'; | |
5 | + | |
6 | +export default ({ invoiceIds, onClose }) => { | |
7 | + const [form] = Form.useForm<{ name: string; company: string }>(); | |
8 | + return ( | |
9 | + <ModalForm<{ | |
10 | + name: string; | |
11 | + company: string; | |
12 | + }> | |
13 | + title="重新开票" | |
14 | + trigger={<Button type="primary">重新开票</Button>} | |
15 | + form={form} | |
16 | + autoFocusFirstInput | |
17 | + modalProps={{ | |
18 | + destroyOnClose: true, | |
19 | + onCancel: () => console.log('run'), | |
20 | + }} | |
21 | + submitTimeout={2000} | |
22 | + onFinish={async (values) => { | |
23 | + const res = await postServiceInvoiceReissueInvoices({ | |
24 | + data: { | |
25 | + invoiceIds, | |
26 | + ...values, | |
27 | + }, | |
28 | + }); | |
29 | + if (res.result === RESPONSE_CODE.SUCCESS) { | |
30 | + message.success('重新开票'); | |
31 | + return true; | |
32 | + } | |
33 | + }} | |
34 | + onOpenChange={(visible) => { | |
35 | + if (!visible) { | |
36 | + onClose(); | |
37 | + } | |
38 | + }} | |
39 | + > | |
40 | + <ProFormTextArea | |
41 | + name="notes" | |
42 | + label="重开原因" | |
43 | + rules={[{ required: true, message: '重开原因必填' }]} | |
44 | + placeholder="请输入重新开票的原因" | |
45 | + /> | |
46 | + </ModalForm> | |
47 | + ); | |
48 | +}; | ... | ... |
src/pages/Invoice/Invoice/index.tsx
... | ... | @@ -3,6 +3,7 @@ import EllipsisDiv from '@/components/Div/EllipsisDiv'; |
3 | 3 | import AddInvoiceDrawerForm from '@/pages/Invoice/Invoice/components/AddInvoiceDrawerForm'; |
4 | 4 | import BankImportModal from '@/pages/Invoice/Invoice/components/BankImportModal'; |
5 | 5 | import InvoiceVerificationModal from '@/pages/Invoice/Invoice/components/InvoiceVerificationModal'; |
6 | +import ReissueModal from '@/pages/Invoice/Invoice/components/ReissueModal'; | |
6 | 7 | import InvoiceWriteOffModal from '@/pages/Invoice/Invoice/components/invoiceWriteOffModal'; |
7 | 8 | import { INVOICE_COLUMNS } from '@/pages/Invoice/constant'; |
8 | 9 | import { INVOCING_STATUS, PAYEE_OPTIONS } from '@/pages/Order/constant'; |
... | ... | @@ -17,9 +18,8 @@ import { downloadFile } from '@/services/order'; |
17 | 18 | import { enumValueToLabel, formatDateTime } from '@/utils'; |
18 | 19 | import { formatDate } from '@/utils/time'; |
19 | 20 | import { ActionType, ProTable } from '@ant-design/pro-components'; |
20 | -import { Button, message } from 'antd'; | |
21 | +import { Button, Space, Table, message } from 'antd'; | |
21 | 22 | import { useRef, useState } from 'react'; |
22 | - | |
23 | 23 | const InvoiceRecord = () => { |
24 | 24 | const invoiceActionRef = useRef<ActionType>(); |
25 | 25 | const [bankImportModalVisible, setBankImportModalVisible] = useState(false); |
... | ... | @@ -229,6 +229,37 @@ const InvoiceRecord = () => { |
229 | 229 | pagination={{ |
230 | 230 | pageSizeOptions: ['10', '20', '50', '100'], |
231 | 231 | }} |
232 | + rowSelection={{ | |
233 | + // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom | |
234 | + // 注释该行则默认不显示下拉选项 | |
235 | + selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT], | |
236 | + }} | |
237 | + tableAlertRender={({ selectedRowKeys, onCleanSelected }) => { | |
238 | + return ( | |
239 | + <Space size={24}> | |
240 | + <span> | |
241 | + 已选 {selectedRowKeys.length} 项 | |
242 | + <a style={{ marginInlineStart: 8 }} onClick={onCleanSelected}> | |
243 | + 取消选择 | |
244 | + </a> | |
245 | + </span> | |
246 | + </Space> | |
247 | + ); | |
248 | + }} | |
249 | + tableAlertOptionRender={({ selectedRowKeys, onCleanSelected }) => { | |
250 | + console.log('selected' + JSON.stringify(selectedRowKeys)); | |
251 | + return ( | |
252 | + <Space size={16}> | |
253 | + <ReissueModal | |
254 | + invoiceIds={selectedRowKeys} | |
255 | + onClose={() => { | |
256 | + invoiceActionRef.current?.reload(); | |
257 | + onCleanSelected(); | |
258 | + }} | |
259 | + /> | |
260 | + </Space> | |
261 | + ); | |
262 | + }} | |
232 | 263 | request={async (params) => { |
233 | 264 | const res = await postServiceInvoiceQueryInvoice({ |
234 | 265 | data: { ...params }, | ... | ... |
src/pages/Invoice/ReissueRecord/components/Audit.tsx
0 → 100644
1 | +import { RESPONSE_CODE } from '@/constants/enum'; | |
2 | +import { postServiceInvoiceReissueAudit } from '@/services'; | |
3 | +import { ModalForm, ProFormText } from '@ant-design/pro-components'; | |
4 | +import { Button, Form, message } from 'antd'; | |
5 | + | |
6 | +export default (recordId) => { | |
7 | + const [form] = Form.useForm<{ name: string; company: string }>(); | |
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 | + submitter={{ | |
20 | + searchConfig: { | |
21 | + submitText: '通过', | |
22 | + resetText: '取消', | |
23 | + }, | |
24 | + render: (props, defaultDoms) => { | |
25 | + console.log('props', JSON.stringify(form.setFieldsValue)); | |
26 | + return [ | |
27 | + ...defaultDoms, | |
28 | + <Button | |
29 | + key="ok" | |
30 | + onClick={async () => { | |
31 | + const res = await postServiceInvoiceReissueAudit({ | |
32 | + body: { | |
33 | + //...values, | |
34 | + ...form.setFieldsValue, | |
35 | + recordId, | |
36 | + }, | |
37 | + }); | |
38 | + if (res.result === RESPONSE_CODE.SUCCESS) { | |
39 | + message.success('提交成功'); | |
40 | + return true; | |
41 | + } | |
42 | + return false; | |
43 | + }} | |
44 | + > | |
45 | + ok | |
46 | + </Button>, | |
47 | + ]; | |
48 | + }, | |
49 | + }} | |
50 | + onFinish={async (values) => { | |
51 | + const res = await postServiceInvoiceReissueAudit({ | |
52 | + body: { | |
53 | + ...values, | |
54 | + recordId, | |
55 | + }, | |
56 | + }); | |
57 | + if (res.result === RESPONSE_CODE.SUCCESS) { | |
58 | + message.success('提交成功'); | |
59 | + return true; | |
60 | + } | |
61 | + return false; | |
62 | + }} | |
63 | + > | |
64 | + <ProFormText width="xs" name="notes" label="备注" /> | |
65 | + </ModalForm> | |
66 | + ); | |
67 | +}; | ... | ... |
src/pages/Invoice/ReissueRecord/index.tsx
0 → 100644
1 | +import { RESPONSE_CODE } from '@/constants/enum'; | |
2 | +import Audit from '@/pages/Invoice/ReissueRecord/components/Audit'; | |
3 | +import { | |
4 | + postServiceConstBeforeInvoicingInvoiceRecordStatus, | |
5 | + postServiceInvoiceReissueRecords, | |
6 | +} from '@/services'; | |
7 | +import { enumToSelect } from '@/utils'; | |
8 | +import { useModel } from '@@/exports'; | |
9 | +import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |
10 | +import { ProTable, TableDropdown } from '@ant-design/pro-components'; | |
11 | +import { useRef } from 'react'; | |
12 | + | |
13 | +export const waitTimePromise = async (time: number = 100) => { | |
14 | + return new Promise((resolve) => { | |
15 | + setTimeout(() => { | |
16 | + resolve(true); | |
17 | + }, time); | |
18 | + }); | |
19 | +}; | |
20 | + | |
21 | +export const waitTime = async (time: number = 100) => { | |
22 | + await waitTimePromise(time); | |
23 | +}; | |
24 | + | |
25 | +type GithubIssueItem = { | |
26 | + url: string; | |
27 | + id: number; | |
28 | + number: number; | |
29 | + title: string; | |
30 | + labels: { | |
31 | + name: string; | |
32 | + color: string; | |
33 | + }[]; | |
34 | + state: string; | |
35 | + comments: number; | |
36 | + created_at: string; | |
37 | + updated_at: string; | |
38 | + closed_at?: string; | |
39 | +}; | |
40 | + | |
41 | +export default () => { | |
42 | + const actionRef = useRef<ActionType>(); | |
43 | + const { getInvoiceFlushStatus } = useModel('enum'); | |
44 | + const columns: ProColumns<GithubIssueItem>[] = [ | |
45 | + { | |
46 | + dataIndex: 'index', | |
47 | + valueType: 'indexBorder', | |
48 | + width: 48, | |
49 | + }, | |
50 | + { | |
51 | + title: '重开的发票', | |
52 | + dataIndex: 'invoiceNumbers', | |
53 | + render: (_, record) => { | |
54 | + return record.invoiceNumbers?.join(','); | |
55 | + }, | |
56 | + hideInSearch: true, | |
57 | + }, | |
58 | + { | |
59 | + title: '重开原因', | |
60 | + dataIndex: 'notes', | |
61 | + ellipsis: true, | |
62 | + hideInSearch: true, | |
63 | + }, | |
64 | + { | |
65 | + title: '申请人', | |
66 | + dataIndex: 'createByName', | |
67 | + ellipsis: true, | |
68 | + hideInSearch: true, | |
69 | + }, | |
70 | + { | |
71 | + title: '申请时间', | |
72 | + dataIndex: 'createTime', | |
73 | + ellipsis: true, | |
74 | + hideInSearch: true, | |
75 | + }, | |
76 | + { | |
77 | + title: '审核状态', | |
78 | + dataIndex: 'statusText', | |
79 | + ellipsis: true, | |
80 | + hideInSearch: true, | |
81 | + }, | |
82 | + { | |
83 | + title: '冲红状态', | |
84 | + dataIndex: 'flushStatusText', | |
85 | + ellipsis: true, | |
86 | + hideInSearch: true, | |
87 | + }, | |
88 | + { | |
89 | + title: '财务负责人', | |
90 | + dataIndex: 'financeManager', | |
91 | + ellipsis: true, | |
92 | + hideInSearch: true, | |
93 | + }, | |
94 | + { | |
95 | + title: '冲红时间', | |
96 | + dataIndex: 'flushDatetime', | |
97 | + ellipsis: true, | |
98 | + hideInSearch: true, | |
99 | + }, | |
100 | + | |
101 | + { | |
102 | + title: '发票号码', | |
103 | + dataIndex: 'invoiceNumber', | |
104 | + hideInTable: true, | |
105 | + }, | |
106 | + { | |
107 | + title: '申请人', | |
108 | + dataIndex: 'createByName', | |
109 | + hideInTable: true, | |
110 | + }, | |
111 | + { | |
112 | + title: '重开原因', | |
113 | + dataIndex: 'notes', | |
114 | + hideInTable: true, | |
115 | + }, | |
116 | + { | |
117 | + title: '申请时间', | |
118 | + valueType: 'dateRange', | |
119 | + hideInTable: true, | |
120 | + search: { | |
121 | + transform: (value) => { | |
122 | + if (value) { | |
123 | + return { | |
124 | + createDatetimeGe: value[0], | |
125 | + createDatetimeLe: value[1], | |
126 | + }; | |
127 | + } | |
128 | + }, | |
129 | + }, | |
130 | + }, | |
131 | + { | |
132 | + title: '审核状态', | |
133 | + valueType: 'select', | |
134 | + key: 'status', | |
135 | + dataIndex: 'status', | |
136 | + filters: true, | |
137 | + onFilter: true, | |
138 | + hideInTable: true, | |
139 | + request: async () => { | |
140 | + const res = await postServiceConstBeforeInvoicingInvoiceRecordStatus(); | |
141 | + return enumToSelect(res.data); | |
142 | + }, | |
143 | + }, | |
144 | + { | |
145 | + title: '冲红状态', | |
146 | + valueType: 'select', | |
147 | + key: 'flushStatus', | |
148 | + dataIndex: 'flushStatus', | |
149 | + filters: true, | |
150 | + onFilter: true, | |
151 | + hideInTable: true, | |
152 | + request: async () => { | |
153 | + const res = await getInvoiceFlushStatus(); | |
154 | + return enumToSelect(res); | |
155 | + }, | |
156 | + }, | |
157 | + { | |
158 | + title: '财务负责人', | |
159 | + dataIndex: 'financeManager', | |
160 | + ellipsis: true, | |
161 | + hideInTable: true, | |
162 | + }, | |
163 | + { | |
164 | + title: '冲红时间', | |
165 | + valueType: 'dateRange', | |
166 | + hideInTable: true, | |
167 | + search: { | |
168 | + transform: (value) => { | |
169 | + if (value) { | |
170 | + return { | |
171 | + flushDatetimeGe: value[0], | |
172 | + flushDatetimeLe: value[1], | |
173 | + }; | |
174 | + } | |
175 | + }, | |
176 | + }, | |
177 | + }, | |
178 | + | |
179 | + { | |
180 | + title: '操作', | |
181 | + valueType: 'option', | |
182 | + key: 'option', | |
183 | + render: (text, record, _, action) => [ | |
184 | + <Audit key={'audit'} recordId={record.id} />, | |
185 | + <a | |
186 | + href={record.url} | |
187 | + target="_blank" | |
188 | + rel="noopener noreferrer" | |
189 | + key="view" | |
190 | + > | |
191 | + 查看 | |
192 | + </a>, | |
193 | + <TableDropdown | |
194 | + key="actionGroup" | |
195 | + onSelect={() => action?.reload()} | |
196 | + menus={[ | |
197 | + { key: 'copy', name: '复制' }, | |
198 | + { key: 'delete', name: '删除' }, | |
199 | + ]} | |
200 | + />, | |
201 | + ], | |
202 | + }, | |
203 | + ]; | |
204 | + return ( | |
205 | + <ProTable<GithubIssueItem> | |
206 | + columns={columns} | |
207 | + actionRef={actionRef} | |
208 | + cardBordered | |
209 | + request={async (params) => { | |
210 | + const res = await postServiceInvoiceReissueRecords({ | |
211 | + data: { | |
212 | + ...params, | |
213 | + }, | |
214 | + }); | |
215 | + if (res.result === RESPONSE_CODE.SUCCESS) { | |
216 | + return { | |
217 | + data: res?.data?.data, | |
218 | + total: res?.data?.total || 0, | |
219 | + }; | |
220 | + } | |
221 | + return { | |
222 | + data: [], | |
223 | + success: false, | |
224 | + }; | |
225 | + }} | |
226 | + editable={{ | |
227 | + type: 'multiple', | |
228 | + }} | |
229 | + columnsState={{ | |
230 | + persistenceKey: 'pro-table-singe-demos', | |
231 | + persistenceType: 'localStorage', | |
232 | + defaultValue: { | |
233 | + option: { fixed: 'right', disable: true }, | |
234 | + }, | |
235 | + onChange(value) { | |
236 | + console.log('value: ', value); | |
237 | + }, | |
238 | + }} | |
239 | + rowKey="id" | |
240 | + search={{ | |
241 | + labelWidth: 'auto', | |
242 | + }} | |
243 | + options={{ | |
244 | + setting: { | |
245 | + listsHeight: 400, | |
246 | + }, | |
247 | + }} | |
248 | + form={{ | |
249 | + // 由于配置了 transform,提交的参数与定义的不同这里需要转化一下 | |
250 | + syncToUrl: (values, type) => { | |
251 | + if (type === 'get') { | |
252 | + return { | |
253 | + ...values, | |
254 | + created_at: [values.startTime, values.endTime], | |
255 | + }; | |
256 | + } | |
257 | + return values; | |
258 | + }, | |
259 | + }} | |
260 | + pagination={{ | |
261 | + pageSize: 5, | |
262 | + onChange: (page) => console.log(page), | |
263 | + }} | |
264 | + dateFormatter="string" | |
265 | + headerTitle="高级表格" | |
266 | + /> | |
267 | + ); | |
268 | +}; | ... | ... |
src/pages/Invoice/waitProcessRecord/index.tsx
... | ... | @@ -33,7 +33,6 @@ const InvoiceRecord = () => { |
33 | 33 | const [invoiceRecordDetailVisible, setInvoiceRecordDetailVisible] = |
34 | 34 | useState(false); |
35 | 35 | const [invoiceRecord, setInvoiceRecord] = useState({}); |
36 | - | |
37 | 36 | useEffect(() => { |
38 | 37 | async function extracted() { |
39 | 38 | let invoiceTypeRet = await postServiceConstInvoiceType(); | ... | ... |
src/pages/Order/OrderList/InvoicingDrawerForm.tsx
... | ... | @@ -31,7 +31,7 @@ import { |
31 | 31 | ProFormText, |
32 | 32 | ProFormTextArea, |
33 | 33 | } from '@ant-design/pro-components'; |
34 | -import { Button, Divider, Form, Space, Table, Tooltip, message } from 'antd'; | |
34 | +import { Button, Divider, Form, Space, Tooltip, message } from 'antd'; | |
35 | 35 | import { useEffect, useRef, useState } from 'react'; |
36 | 36 | |
37 | 37 | export default ({ |
... | ... | @@ -88,6 +88,7 @@ export default ({ |
88 | 88 | subOrderIdsName: '开票订单', |
89 | 89 | }); |
90 | 90 | types.set('reissue', { title: '重新申请', subOrderIdsName: '重开订单' }); |
91 | + | |
91 | 92 | function copyToClipboard(text: string) { |
92 | 93 | // 创建一个临时的textarea元素 |
93 | 94 | const textarea = document.createElement('textarea'); |
... | ... | @@ -110,6 +111,7 @@ export default ({ |
110 | 111 | document.body.removeChild(textarea); |
111 | 112 | } |
112 | 113 | } |
114 | + | |
113 | 115 | // 定义一个计算总金额的函数 |
114 | 116 | const calculateTotalPrice = (index: number) => { |
115 | 117 | const invoiceDetails = form.getFieldValue('invoiceDetails'); |
... | ... | @@ -141,44 +143,6 @@ export default ({ |
141 | 143 | drawerProps={{ |
142 | 144 | destroyOnClose: true, |
143 | 145 | }} |
144 | - rowSelection={{ | |
145 | - // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom | |
146 | - // 注释该行则默认不显示下拉选项 | |
147 | - selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT], | |
148 | - }} | |
149 | - tableAlertRender={({ | |
150 | - selectedRowKeys, | |
151 | - selectedRows, | |
152 | - onCleanSelected, | |
153 | - }) => { | |
154 | - console.log(selectedRowKeys, selectedRows); | |
155 | - return ( | |
156 | - <Space size={24}> | |
157 | - <span> | |
158 | - 已选 {selectedRowKeys.length} 项 | |
159 | - <a style={{ marginInlineStart: 8 }} onClick={onCleanSelected}> | |
160 | - 取消选择 | |
161 | - </a> | |
162 | - </span> | |
163 | - <span>{`容器数量: ${selectedRows.reduce( | |
164 | - (pre, item) => pre + item.containers, | |
165 | - 0, | |
166 | - )} 个`}</span> | |
167 | - <span>{`调用量: ${selectedRows.reduce( | |
168 | - (pre, item) => pre + item.callNumber, | |
169 | - 0, | |
170 | - )} 次`}</span> | |
171 | - </Space> | |
172 | - ); | |
173 | - }} | |
174 | - tableAlertOptionRender={() => { | |
175 | - return ( | |
176 | - <Space size={16}> | |
177 | - <a>批量删除</a> | |
178 | - <a>导出数据</a> | |
179 | - </Space> | |
180 | - ); | |
181 | - }} | |
182 | 146 | submitter={{ |
183 | 147 | render: (props, defaultDoms) => { |
184 | 148 | return [ | ... | ... |
src/pages/Order/OrderList/OrderList.tsx
... | ... | @@ -157,7 +157,6 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { |
157 | 157 | useState<boolean>(false); |
158 | 158 | const [historyModalVisible, setHistoryModalVisible] = |
159 | 159 | useState<boolean>(false); |
160 | - const [invoicingType, setInvoicingType] = useState<string>(''); | |
161 | 160 | const [isRePrintOrder, setIsRePrintOrder] = useState<boolean>(false); |
162 | 161 | const [isSendProduct, setIsSendProduct] = useState<boolean>(false); |
163 | 162 | const [isMainOrder, setIsMainOrder] = useState<boolean>(false); |
... | ... | @@ -1847,7 +1846,6 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { |
1847 | 1846 | className="p-0" |
1848 | 1847 | type="link" |
1849 | 1848 | onClick={() => { |
1850 | - setInvoicingType('applyInvoicing'); | |
1851 | 1849 | setInvoicingDrawerFormVisible(true); |
1852 | 1850 | createOptObject(optRecord.id, record.id); |
1853 | 1851 | setIsEdit(false); |
... | ... | @@ -3478,7 +3476,6 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { |
3478 | 3476 | } |
3479 | 3477 | |
3480 | 3478 | createOptObject(null, record.id); |
3481 | - setInvoicingType('applyInvoicing'); | |
3482 | 3479 | setInvoicingDrawerFormVisible(true); |
3483 | 3480 | setIsEdit(false); |
3484 | 3481 | setIsMainOrder(false); |
... | ... | @@ -3520,6 +3517,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { |
3520 | 3517 | ) { |
3521 | 3518 | //是审核通过及之后的订单 |
3522 | 3519 | if ( |
3520 | + orderStatus !== 'UNAUDITED' && | |
3523 | 3521 | orderStatus !== 'AUDIT_FAILED' && |
3524 | 3522 | orderStatus !== 'LEADER_PROCESS' && |
3525 | 3523 | orderStatus !== 'SALES_CONFIRM' && |
... | ... | @@ -4469,7 +4467,6 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { |
4469 | 4467 | onClick={() => { |
4470 | 4468 | setIsEdit(false); |
4471 | 4469 | setIsMainOrder(true); |
4472 | - setInvoicingType('applyInvoicing'); | |
4473 | 4470 | setInvoicingDrawerFormVisible(true); |
4474 | 4471 | }} |
4475 | 4472 | disabled={selectedSubOrderKeys?.length === 0} |
... | ... | @@ -4533,7 +4530,6 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { |
4533 | 4530 | return; |
4534 | 4531 | } |
4535 | 4532 | }); |
4536 | - setInvoicingType('applyInvoicing'); | |
4537 | 4533 | //遍历afterInvoicingStatusList |
4538 | 4534 | setInvoicingDrawerFormVisible(true); |
4539 | 4535 | }} |
... | ... | @@ -4541,19 +4537,6 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { |
4541 | 4537 | > |
4542 | 4538 | 申请开票 |
4543 | 4539 | </Button>, |
4544 | - <Button | |
4545 | - type="primary" | |
4546 | - key="inv" | |
4547 | - onClick={() => { | |
4548 | - setIsMainOrder(true); | |
4549 | - setInvoicingType('reissue'); | |
4550 | - //遍历afterInvoicingStatusList | |
4551 | - setInvoicingDrawerFormVisible(true); | |
4552 | - }} | |
4553 | - disabled={selectedSubOrderKeys?.length === 0} | |
4554 | - > | |
4555 | - 重新开票 | |
4556 | - </Button>, | |
4557 | 4540 | ); |
4558 | 4541 | |
4559 | 4542 | if (rolePath?.includes('addOrder')) { |
... | ... | @@ -5228,7 +5211,6 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { |
5228 | 5211 | ? [...subOrderSelectedMap.values()].flat() |
5229 | 5212 | : buildSubOrders() |
5230 | 5213 | } |
5231 | - type={invoicingType} | |
5232 | 5214 | setVisible={(val: boolean) => { |
5233 | 5215 | setInvoicingDrawerFormVisible(val); |
5234 | 5216 | if (!val) { | ... | ... |
src/services/definition.ts
... | ... | @@ -753,6 +753,7 @@ export interface ApiQueryOrderStatusCountsRequest { |
753 | 753 | |
754 | 754 | export interface ApplyInvoiceDTO { |
755 | 755 | applyInvoicingNotes?: string; |
756 | + applyType?: string; | |
756 | 757 | /** |
757 | 758 | * @description |
758 | 759 | * 开票备注 |
... | ... | @@ -920,6 +921,7 @@ export interface ApplyInvoiceDTO { |
920 | 921 | receiveEmail?: string; |
921 | 922 | reissueInvoiceNumbers?: Array<string>; |
922 | 923 | reissueInvoiceRecordIds?: Array<number>; |
924 | + reissueNotes?: string; | |
923 | 925 | /** |
924 | 926 | * @description |
925 | 927 | * 订单来源 |
... | ... | @@ -1471,6 +1473,7 @@ export interface Invoice { |
1471 | 1473 | notes?: string; |
1472 | 1474 | payee?: string; |
1473 | 1475 | purchaser?: string; |
1476 | + reissueStatus?: string; | |
1474 | 1477 | sale?: string; |
1475 | 1478 | status?: string; |
1476 | 1479 | updateByName?: string; |
... | ... | @@ -2048,6 +2051,13 @@ export interface ItemSaItem { |
2048 | 2051 | itemValue?: string; |
2049 | 2052 | } |
2050 | 2053 | |
2054 | +export interface LittleTicketsDO { | |
2055 | + annexUrl?: string; | |
2056 | + assignPeople?: string; | |
2057 | + detailText?: string; | |
2058 | + type?: string; | |
2059 | +} | |
2060 | + | |
2051 | 2061 | export interface MainOrderqueryRequest { |
2052 | 2062 | afterInvoicingStatusIsNull?: boolean; |
2053 | 2063 | /** @format date */ |
... | ... | @@ -4085,9 +4095,9 @@ export interface TicketsVo { |
4085 | 4095 | origin?: string; |
4086 | 4096 | result?: string; |
4087 | 4097 | resultAnnexName?: string; |
4088 | - resultAnnexUrl?: string; | |
4089 | 4098 | status?: string; |
4090 | 4099 | type?: string; |
4100 | + typeText?: string; | |
4091 | 4101 | } |
4092 | 4102 | |
4093 | 4103 | export interface ToProcureAuditDto { |
... | ... | @@ -4318,6 +4328,11 @@ export interface UserListRequest { |
4318 | 4328 | * 关键字 |
4319 | 4329 | */ |
4320 | 4330 | keywords?: string; |
4331 | + /** | |
4332 | + * @description | |
4333 | + * 余额 | |
4334 | + */ | |
4335 | + nowMoneySearch?: string; | |
4321 | 4336 | /** @format int32 */ |
4322 | 4337 | pageSize?: number; |
4323 | 4338 | /** |
... | ... | @@ -4421,6 +4436,7 @@ export interface ApiOrderConfirmReceiveRequest { |
4421 | 4436 | } |
4422 | 4437 | |
4423 | 4438 | export interface ClientCommunicationInfo { |
4439 | + annexUrl?: string; | |
4424 | 4440 | assignPeople?: string; |
4425 | 4441 | attachments?: string; |
4426 | 4442 | /** |
... | ... | @@ -4466,13 +4482,13 @@ export interface ClientCommunicationInfo { |
4466 | 4482 | * @format date-time |
4467 | 4483 | */ |
4468 | 4484 | datetime?: string; |
4485 | + detailText?: string; | |
4469 | 4486 | /** @format int64 */ |
4470 | 4487 | id?: number; |
4488 | + list?: Array<LittleTicketsDO>; | |
4471 | 4489 | logicDelete?: boolean; |
4472 | - ticketsAttachments?: string; | |
4473 | - ticketsDetail?: string; | |
4490 | + ticketsList?: Array<TicketsVo>; | |
4474 | 4491 | ticketsStatus?: string; |
4475 | - ticketsType?: string; | |
4476 | 4492 | ticketsTypeText?: string; |
4477 | 4493 | /** |
4478 | 4494 | * @description |
... | ... | @@ -4484,6 +4500,7 @@ export interface ClientCommunicationInfo { |
4484 | 4500 | * 客户状态 |
4485 | 4501 | */ |
4486 | 4502 | tradeStatusLike?: string; |
4503 | + type?: string; | |
4487 | 4504 | updateByName?: string; |
4488 | 4505 | /** @format date-time */ |
4489 | 4506 | updateTime?: string; |
... | ... | @@ -4600,6 +4617,54 @@ export interface InvoiceDetail { |
4600 | 4617 | updateTime?: string; |
4601 | 4618 | } |
4602 | 4619 | |
4620 | +export interface InvoiceReissueRecord { | |
4621 | + createByName?: string; | |
4622 | + createByNameLike?: string; | |
4623 | + /** @format date-time */ | |
4624 | + createDatetimeGe?: string; | |
4625 | + /** @format date-time */ | |
4626 | + createDatetimeLe?: string; | |
4627 | + /** @format date-time */ | |
4628 | + createTime?: string; | |
4629 | + /** @format int32 */ | |
4630 | + current?: number; | |
4631 | + /** @format int32 */ | |
4632 | + end?: number; | |
4633 | + financeManager?: string; | |
4634 | + /** @format date-time */ | |
4635 | + flushDatetime?: string; | |
4636 | + /** @format date-time */ | |
4637 | + flushDatetimeGe?: string; | |
4638 | + /** @format date-time */ | |
4639 | + flushDatetimeLe?: string; | |
4640 | + flushStatus?: string; | |
4641 | + flushStatusText?: string; | |
4642 | + /** @format int64 */ | |
4643 | + id?: number; | |
4644 | + idIn?: Array<number>; | |
4645 | + invoiceIdIn?: Array<string>; | |
4646 | + invoiceIds?: Array<number>; | |
4647 | + invoiceNumber?: string; | |
4648 | + invoiceNumbers?: Array<string>; | |
4649 | + logicDelete?: boolean; | |
4650 | + notes?: string; | |
4651 | + /** @format int32 */ | |
4652 | + pageSize?: number; | |
4653 | + passed?: boolean; | |
4654 | + paths?: Array<string>; | |
4655 | + recordIds?: Array<number>; | |
4656 | + reissueStatus?: string; | |
4657 | + /** @format int32 */ | |
4658 | + start?: number; | |
4659 | + status?: string; | |
4660 | + statusText?: string; | |
4661 | + /** @format int32 */ | |
4662 | + total?: number; | |
4663 | + updateByName?: string; | |
4664 | + /** @format date-time */ | |
4665 | + updateTime?: string; | |
4666 | +} | |
4667 | + | |
4603 | 4668 | export interface ResearchGroupAccounts { |
4604 | 4669 | /** |
4605 | 4670 | * @description | ... | ... |
src/services/request.ts
... | ... | @@ -61,6 +61,7 @@ import type { |
61 | 61 | InvoiceDto, |
62 | 62 | InvoiceRecordDTO, |
63 | 63 | InvoiceRecordQueryRequest, |
64 | + InvoiceReissueRecord, | |
64 | 65 | MainOrderqueryRequest, |
65 | 66 | MaterialListReply, |
66 | 67 | MaterialMaterialListReq, |
... | ... | @@ -14902,6 +14903,115 @@ export const postServiceConstInitInvoiceDetailNames = /* #__PURE__ */ (() => { |
14902 | 14903 | return request; |
14903 | 14904 | })(); |
14904 | 14905 | |
14906 | +/** @description response type for postServiceConstInvoiceFlushStatus */ | |
14907 | +export interface PostServiceConstInvoiceFlushStatusResponse { | |
14908 | + /** | |
14909 | + * @description | |
14910 | + * OK | |
14911 | + */ | |
14912 | + 200: ServerResult; | |
14913 | + /** | |
14914 | + * @description | |
14915 | + * Created | |
14916 | + */ | |
14917 | + 201: any; | |
14918 | + /** | |
14919 | + * @description | |
14920 | + * Unauthorized | |
14921 | + */ | |
14922 | + 401: any; | |
14923 | + /** | |
14924 | + * @description | |
14925 | + * Forbidden | |
14926 | + */ | |
14927 | + 403: any; | |
14928 | + /** | |
14929 | + * @description | |
14930 | + * Not Found | |
14931 | + */ | |
14932 | + 404: any; | |
14933 | +} | |
14934 | + | |
14935 | +export type PostServiceConstInvoiceFlushStatusResponseSuccess = | |
14936 | + PostServiceConstInvoiceFlushStatusResponse[200]; | |
14937 | +/** | |
14938 | + * @description | |
14939 | + * 发票冲红状态 | |
14940 | + * @tags front-const-controller | |
14941 | + * @produces * | |
14942 | + * @consumes application/json | |
14943 | + */ | |
14944 | +export const postServiceConstInvoiceFlushStatus = /* #__PURE__ */ (() => { | |
14945 | + const method = 'post'; | |
14946 | + const url = '/service/const/invoiceFlushStatus'; | |
14947 | + function request(): Promise<PostServiceConstInvoiceFlushStatusResponseSuccess> { | |
14948 | + return requester(request.url, { | |
14949 | + method: request.method, | |
14950 | + }) as unknown as Promise<PostServiceConstInvoiceFlushStatusResponseSuccess>; | |
14951 | + } | |
14952 | + | |
14953 | + /** http method */ | |
14954 | + request.method = method; | |
14955 | + /** request url */ | |
14956 | + request.url = url; | |
14957 | + return request; | |
14958 | +})(); | |
14959 | + | |
14960 | +/** @description response type for postServiceConstInvoiceReissueRecordStatus */ | |
14961 | +export interface PostServiceConstInvoiceReissueRecordStatusResponse { | |
14962 | + /** | |
14963 | + * @description | |
14964 | + * OK | |
14965 | + */ | |
14966 | + 200: ServerResult; | |
14967 | + /** | |
14968 | + * @description | |
14969 | + * Created | |
14970 | + */ | |
14971 | + 201: any; | |
14972 | + /** | |
14973 | + * @description | |
14974 | + * Unauthorized | |
14975 | + */ | |
14976 | + 401: any; | |
14977 | + /** | |
14978 | + * @description | |
14979 | + * Forbidden | |
14980 | + */ | |
14981 | + 403: any; | |
14982 | + /** | |
14983 | + * @description | |
14984 | + * Not Found | |
14985 | + */ | |
14986 | + 404: any; | |
14987 | +} | |
14988 | + | |
14989 | +export type PostServiceConstInvoiceReissueRecordStatusResponseSuccess = | |
14990 | + PostServiceConstInvoiceReissueRecordStatusResponse[200]; | |
14991 | +/** | |
14992 | + * @description | |
14993 | + * 发票重开状态 | |
14994 | + * @tags front-const-controller | |
14995 | + * @produces * | |
14996 | + * @consumes application/json | |
14997 | + */ | |
14998 | +export const postServiceConstInvoiceReissueRecordStatus = | |
14999 | + /* #__PURE__ */ (() => { | |
15000 | + const method = 'post'; | |
15001 | + const url = '/service/const/invoiceReissueRecordStatus'; | |
15002 | + function request(): Promise<PostServiceConstInvoiceReissueRecordStatusResponseSuccess> { | |
15003 | + return requester(request.url, { | |
15004 | + method: request.method, | |
15005 | + }) as unknown as Promise<PostServiceConstInvoiceReissueRecordStatusResponseSuccess>; | |
15006 | + } | |
15007 | + | |
15008 | + /** http method */ | |
15009 | + request.method = method; | |
15010 | + /** request url */ | |
15011 | + request.url = url; | |
15012 | + return request; | |
15013 | + })(); | |
15014 | + | |
14905 | 15015 | /** @description response type for postServiceConstInvoiceType */ |
14906 | 15016 | export interface PostServiceConstInvoiceTypeResponse { |
14907 | 15017 | /** |
... | ... | @@ -17775,6 +17885,148 @@ export const postServiceInvoiceReissue = /* #__PURE__ */ (() => { |
17775 | 17885 | return request; |
17776 | 17886 | })(); |
17777 | 17887 | |
17888 | +/** @description request parameter type for postServiceInvoiceReissueAudit */ | |
17889 | +export interface PostServiceInvoiceReissueAuditOption { | |
17890 | + /** | |
17891 | + * @description | |
17892 | + * dto | |
17893 | + */ | |
17894 | + body: { | |
17895 | + /** | |
17896 | + @description | |
17897 | + dto */ | |
17898 | + dto: InvoiceReissueRecord; | |
17899 | + }; | |
17900 | +} | |
17901 | + | |
17902 | +/** @description response type for postServiceInvoiceReissueAudit */ | |
17903 | +export interface PostServiceInvoiceReissueAuditResponse { | |
17904 | + /** | |
17905 | + * @description | |
17906 | + * OK | |
17907 | + */ | |
17908 | + 200: ServerResult; | |
17909 | + /** | |
17910 | + * @description | |
17911 | + * Created | |
17912 | + */ | |
17913 | + 201: any; | |
17914 | + /** | |
17915 | + * @description | |
17916 | + * Unauthorized | |
17917 | + */ | |
17918 | + 401: any; | |
17919 | + /** | |
17920 | + * @description | |
17921 | + * Forbidden | |
17922 | + */ | |
17923 | + 403: any; | |
17924 | + /** | |
17925 | + * @description | |
17926 | + * Not Found | |
17927 | + */ | |
17928 | + 404: any; | |
17929 | +} | |
17930 | + | |
17931 | +export type PostServiceInvoiceReissueAuditResponseSuccess = | |
17932 | + PostServiceInvoiceReissueAuditResponse[200]; | |
17933 | +/** | |
17934 | + * @description | |
17935 | + * ReissueAudit | |
17936 | + * @tags 发票 | |
17937 | + * @produces * | |
17938 | + * @consumes application/json | |
17939 | + */ | |
17940 | +export const postServiceInvoiceReissueAudit = /* #__PURE__ */ (() => { | |
17941 | + const method = 'post'; | |
17942 | + const url = '/service/invoice/reissue/audit'; | |
17943 | + function request( | |
17944 | + option: PostServiceInvoiceReissueAuditOption, | |
17945 | + ): Promise<PostServiceInvoiceReissueAuditResponseSuccess> { | |
17946 | + return requester(request.url, { | |
17947 | + method: request.method, | |
17948 | + ...option, | |
17949 | + }) as unknown as Promise<PostServiceInvoiceReissueAuditResponseSuccess>; | |
17950 | + } | |
17951 | + | |
17952 | + /** http method */ | |
17953 | + request.method = method; | |
17954 | + /** request url */ | |
17955 | + request.url = url; | |
17956 | + return request; | |
17957 | +})(); | |
17958 | + | |
17959 | +/** @description request parameter type for postServiceInvoiceReissueInvoices */ | |
17960 | +export interface PostServiceInvoiceReissueInvoicesOption { | |
17961 | + /** | |
17962 | + * @description | |
17963 | + * dto | |
17964 | + */ | |
17965 | + body: { | |
17966 | + /** | |
17967 | + @description | |
17968 | + dto */ | |
17969 | + dto: InvoiceReissueRecord; | |
17970 | + }; | |
17971 | +} | |
17972 | + | |
17973 | +/** @description response type for postServiceInvoiceReissueInvoices */ | |
17974 | +export interface PostServiceInvoiceReissueInvoicesResponse { | |
17975 | + /** | |
17976 | + * @description | |
17977 | + * OK | |
17978 | + */ | |
17979 | + 200: ServerResult; | |
17980 | + /** | |
17981 | + * @description | |
17982 | + * Created | |
17983 | + */ | |
17984 | + 201: any; | |
17985 | + /** | |
17986 | + * @description | |
17987 | + * Unauthorized | |
17988 | + */ | |
17989 | + 401: any; | |
17990 | + /** | |
17991 | + * @description | |
17992 | + * Forbidden | |
17993 | + */ | |
17994 | + 403: any; | |
17995 | + /** | |
17996 | + * @description | |
17997 | + * Not Found | |
17998 | + */ | |
17999 | + 404: any; | |
18000 | +} | |
18001 | + | |
18002 | +export type PostServiceInvoiceReissueInvoicesResponseSuccess = | |
18003 | + PostServiceInvoiceReissueInvoicesResponse[200]; | |
18004 | +/** | |
18005 | + * @description | |
18006 | + * 重新开票 | |
18007 | + * @tags 发票 | |
18008 | + * @produces * | |
18009 | + * @consumes application/json | |
18010 | + */ | |
18011 | +export const postServiceInvoiceReissueInvoices = /* #__PURE__ */ (() => { | |
18012 | + const method = 'post'; | |
18013 | + const url = '/service/invoice/reissueInvoices'; | |
18014 | + function request( | |
18015 | + option: PostServiceInvoiceReissueInvoicesOption, | |
18016 | + ): Promise<PostServiceInvoiceReissueInvoicesResponseSuccess> { | |
18017 | + return requester(request.url, { | |
18018 | + method: request.method, | |
18019 | + ...option, | |
18020 | + }) as unknown as Promise<PostServiceInvoiceReissueInvoicesResponseSuccess>; | |
18021 | + } | |
18022 | + | |
18023 | + /** http method */ | |
18024 | + request.method = method; | |
18025 | + /** request url */ | |
18026 | + request.url = url; | |
18027 | + return request; | |
18028 | +})(); | |
18029 | + | |
17778 | 18030 | /** @description request parameter type for postServiceInvoiceReissueOld */ |
17779 | 18031 | export interface PostServiceInvoiceReissueOldOption { |
17780 | 18032 | /** |
... | ... | @@ -17846,6 +18098,77 @@ export const postServiceInvoiceReissueOld = /* #__PURE__ */ (() => { |
17846 | 18098 | return request; |
17847 | 18099 | })(); |
17848 | 18100 | |
18101 | +/** @description request parameter type for postServiceInvoiceReissueRecords */ | |
18102 | +export interface PostServiceInvoiceReissueRecordsOption { | |
18103 | + /** | |
18104 | + * @description | |
18105 | + * dto | |
18106 | + */ | |
18107 | + body: { | |
18108 | + /** | |
18109 | + @description | |
18110 | + dto */ | |
18111 | + dto: InvoiceReissueRecord; | |
18112 | + }; | |
18113 | +} | |
18114 | + | |
18115 | +/** @description response type for postServiceInvoiceReissueRecords */ | |
18116 | +export interface PostServiceInvoiceReissueRecordsResponse { | |
18117 | + /** | |
18118 | + * @description | |
18119 | + * OK | |
18120 | + */ | |
18121 | + 200: ServerResult; | |
18122 | + /** | |
18123 | + * @description | |
18124 | + * Created | |
18125 | + */ | |
18126 | + 201: any; | |
18127 | + /** | |
18128 | + * @description | |
18129 | + * Unauthorized | |
18130 | + */ | |
18131 | + 401: any; | |
18132 | + /** | |
18133 | + * @description | |
18134 | + * Forbidden | |
18135 | + */ | |
18136 | + 403: any; | |
18137 | + /** | |
18138 | + * @description | |
18139 | + * Not Found | |
18140 | + */ | |
18141 | + 404: any; | |
18142 | +} | |
18143 | + | |
18144 | +export type PostServiceInvoiceReissueRecordsResponseSuccess = | |
18145 | + PostServiceInvoiceReissueRecordsResponse[200]; | |
18146 | +/** | |
18147 | + * @description | |
18148 | + * 获取重开记录 | |
18149 | + * @tags 发票 | |
18150 | + * @produces * | |
18151 | + * @consumes application/json | |
18152 | + */ | |
18153 | +export const postServiceInvoiceReissueRecords = /* #__PURE__ */ (() => { | |
18154 | + const method = 'post'; | |
18155 | + const url = '/service/invoice/reissueRecords'; | |
18156 | + function request( | |
18157 | + option: PostServiceInvoiceReissueRecordsOption, | |
18158 | + ): Promise<PostServiceInvoiceReissueRecordsResponseSuccess> { | |
18159 | + return requester(request.url, { | |
18160 | + method: request.method, | |
18161 | + ...option, | |
18162 | + }) as unknown as Promise<PostServiceInvoiceReissueRecordsResponseSuccess>; | |
18163 | + } | |
18164 | + | |
18165 | + /** http method */ | |
18166 | + request.method = method; | |
18167 | + /** request url */ | |
18168 | + request.url = url; | |
18169 | + return request; | |
18170 | +})(); | |
18171 | + | |
17849 | 18172 | /** @description request parameter type for postServiceInvoiceSucessInvoices */ |
17850 | 18173 | export interface PostServiceInvoiceSucessInvoicesOption { |
17851 | 18174 | /** | ... | ... |