Commit d9033a556587e1a994e038f364f05d38d9766998
1 parent
0afddbf9
feat(invoice): 优化重开票功能和记录展示
- 在 ReissueModal 组件中添加 disable 属性,根据选中项控制按钮状态 - 优化 ReissueRecord 组件中的发票号码展示,支持换行显示 -增加冲红功能相关逻辑和接口调用 - 调整日期时间范围查询,提高搜索准确性 - 优化备注字段展示,支持模糊查询
Showing
7 changed files
with
173 additions
and
97 deletions
.umirc.ts
... | ... | @@ -14,14 +14,14 @@ export default defineConfig({ |
14 | 14 | }, |
15 | 15 | proxy: { |
16 | 16 | '/api/': { |
17 | - // target: 'http://localhost:8085/', | |
17 | + target: 'http://localhost:8085/', | |
18 | 18 | // target: 'http://192.168.1.6:8085/', |
19 | - target: 'http://39.108.227.113:8085/', | |
19 | + //target: 'http://39.108.227.113:8085/', | |
20 | 20 | changeOrigin: true, |
21 | 21 | pathRewrite: { '^/api': '' }, |
22 | 22 | }, |
23 | 23 | '/previewApi/': { |
24 | - target: 'http://39.108.227.113:8092/', | |
24 | + //target: 'http://39.108.227.113:8092/', | |
25 | 25 | changeOrigin: true, |
26 | 26 | pathRewrite: { '^/previewApi': '' }, |
27 | 27 | }, | ... | ... |
src/pages/Invoice/Invoice/components/ReissueModal.tsx
... | ... | @@ -3,7 +3,7 @@ import { postServiceInvoiceReissueInvoices } from '@/services'; |
3 | 3 | import { ModalForm, ProFormTextArea } from '@ant-design/pro-components'; |
4 | 4 | import { Button, Form, message } from 'antd'; |
5 | 5 | |
6 | -export default ({ invoiceIds, onClose }) => { | |
6 | +export default ({ invoiceIds, onClose, disable }) => { | |
7 | 7 | const [form] = Form.useForm<{ name: string; company: string }>(); |
8 | 8 | return ( |
9 | 9 | <ModalForm<{ |
... | ... | @@ -11,7 +11,11 @@ export default ({ invoiceIds, onClose }) => { |
11 | 11 | company: string; |
12 | 12 | }> |
13 | 13 | title="重新开票" |
14 | - trigger={<Button type="primary">重新开票</Button>} | |
14 | + trigger={ | |
15 | + <Button type="primary" disabled={disable}> | |
16 | + 重新开票 | |
17 | + </Button> | |
18 | + } | |
15 | 19 | form={form} |
16 | 20 | autoFocusFirstInput |
17 | 21 | modalProps={{ | ... | ... |
src/pages/Invoice/Invoice/index.tsx
... | ... | @@ -233,6 +233,7 @@ const InvoiceRecord = () => { |
233 | 233 | // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom |
234 | 234 | // 注释该行则默认不显示下拉选项 |
235 | 235 | selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT], |
236 | + alwaysShowAlert: true, | |
236 | 237 | }} |
237 | 238 | tableAlertRender={({ selectedRowKeys, onCleanSelected }) => { |
238 | 239 | return ( |
... | ... | @@ -252,6 +253,7 @@ const InvoiceRecord = () => { |
252 | 253 | <Space size={16}> |
253 | 254 | <ReissueModal |
254 | 255 | invoiceIds={selectedRowKeys} |
256 | + disable={selectedRowKeys.length === 0} | |
255 | 257 | onClose={() => { |
256 | 258 | invoiceActionRef.current?.reload(); |
257 | 259 | onCleanSelected(); | ... | ... |
src/pages/Invoice/ReissueRecord/components/Audit.tsx
1 | 1 | import { RESPONSE_CODE } from '@/constants/enum'; |
2 | 2 | import { postServiceInvoiceReissueAudit } from '@/services'; |
3 | -import { ModalForm, ProFormText } from '@ant-design/pro-components'; | |
3 | +import { ModalForm, ProFormTextArea } from '@ant-design/pro-components'; | |
4 | 4 | import { Button, Form, message } from 'antd'; |
5 | 5 | |
6 | 6 | export default ({ recordIds, onClose }) => { |
... | ... | @@ -70,7 +70,7 @@ export default ({ recordIds, onClose }) => { |
70 | 70 | return true; |
71 | 71 | }} |
72 | 72 | > |
73 | - <ProFormText width="xs" name="notes" label="备注" /> | |
73 | + <ProFormTextArea name="notes" label="备注" /> | |
74 | 74 | </ModalForm> |
75 | 75 | ); |
76 | 76 | }; | ... | ... |
src/pages/Invoice/ReissueRecord/index.tsx
... | ... | @@ -2,8 +2,9 @@ import ButtonConfirm from '@/components/ButtomConfirm'; |
2 | 2 | import { RESPONSE_CODE } from '@/constants/enum'; |
3 | 3 | import Audit from '@/pages/Invoice/ReissueRecord/components/Audit'; |
4 | 4 | import { |
5 | - postServiceConstBeforeInvoicingInvoiceRecordStatus, | |
5 | + postServiceConstInvoiceReissueRecordStatus, | |
6 | 6 | postServiceInvoiceReissueRecordDelete, |
7 | + postServiceInvoiceReissueRecordFlush, | |
7 | 8 | postServiceInvoiceReissueRecords, |
8 | 9 | } from '@/services'; |
9 | 10 | import { enumToSelect } from '@/utils'; |
... | ... | @@ -34,7 +35,11 @@ export default () => { |
34 | 35 | title: '重开的发票', |
35 | 36 | dataIndex: 'invoiceNumbers', |
36 | 37 | render: (_, record) => { |
37 | - return record.invoiceNumbers?.join(','); | |
38 | + return ( | |
39 | + <div style={{ whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}> | |
40 | + {record.invoiceNumbers?.join(',\n')} | |
41 | + </div> | |
42 | + ); | |
38 | 43 | }, |
39 | 44 | ellipsis: true, |
40 | 45 | hideInSearch: true, |
... | ... | @@ -89,17 +94,17 @@ export default () => { |
89 | 94 | }, |
90 | 95 | { |
91 | 96 | title: '申请人', |
92 | - dataIndex: 'createByName', | |
97 | + dataIndex: 'createByNameLike', | |
93 | 98 | hideInTable: true, |
94 | 99 | }, |
95 | 100 | { |
96 | 101 | title: '重开原因', |
97 | - dataIndex: 'notes', | |
102 | + dataIndex: 'notesLike', | |
98 | 103 | hideInTable: true, |
99 | 104 | }, |
100 | 105 | { |
101 | 106 | title: '申请时间', |
102 | - valueType: 'dateRange', | |
107 | + valueType: 'dateTimeRange', | |
103 | 108 | hideInTable: true, |
104 | 109 | search: { |
105 | 110 | transform: (value) => { |
... | ... | @@ -121,7 +126,7 @@ export default () => { |
121 | 126 | onFilter: true, |
122 | 127 | hideInTable: true, |
123 | 128 | request: async () => { |
124 | - const res = await postServiceConstBeforeInvoicingInvoiceRecordStatus(); | |
129 | + const res = await postServiceConstInvoiceReissueRecordStatus(); | |
125 | 130 | return enumToSelect(res.data); |
126 | 131 | }, |
127 | 132 | }, |
... | ... | @@ -146,7 +151,7 @@ export default () => { |
146 | 151 | }, |
147 | 152 | { |
148 | 153 | title: '冲红时间', |
149 | - valueType: 'dateRange', | |
154 | + valueType: 'dateTimeRange', | |
150 | 155 | hideInTable: true, |
151 | 156 | search: { |
152 | 157 | transform: (value) => { |
... | ... | @@ -193,6 +198,23 @@ export default () => { |
193 | 198 | }} |
194 | 199 | /> |
195 | 200 | ), |
201 | + record.paths?.includes('flush') && ( | |
202 | + <ButtonConfirm | |
203 | + key="flush" | |
204 | + className="p-0" | |
205 | + title={'确认冲红发票?'} | |
206 | + text="冲红" | |
207 | + onConfirm={async () => { | |
208 | + let res = await postServiceInvoiceReissueRecordFlush({ | |
209 | + data: { id: record.id }, | |
210 | + }); | |
211 | + if (res) { | |
212 | + message.success(res.message); | |
213 | + actionRef.current?.reload(); | |
214 | + } | |
215 | + }} | |
216 | + /> | |
217 | + ), | |
196 | 218 | ]; |
197 | 219 | }, |
198 | 220 | }, | ... | ... |
src/services/definition.ts
... | ... | @@ -3575,8 +3575,6 @@ export interface ResearchGroupListRequest { |
3575 | 3575 | /** @format int32 */ |
3576 | 3576 | page?: number; |
3577 | 3577 | /** @format int32 */ |
3578 | - page?: number; | |
3579 | - /** @format int32 */ | |
3580 | 3578 | pageSize?: number; |
3581 | 3579 | /** @format int32 */ |
3582 | 3580 | start?: number; |
... | ... | @@ -4097,7 +4095,6 @@ export interface TicketsVo { |
4097 | 4095 | origin?: string; |
4098 | 4096 | result?: string; |
4099 | 4097 | resultAnnexName?: string; |
4100 | - resultAnnexUrl?: string; | |
4101 | 4098 | status?: string; |
4102 | 4099 | type?: string; |
4103 | 4100 | typeText?: string; |
... | ... | @@ -4490,10 +4487,8 @@ export interface ClientCommunicationInfo { |
4490 | 4487 | id?: number; |
4491 | 4488 | list?: Array<LittleTicketsDO>; |
4492 | 4489 | logicDelete?: boolean; |
4493 | - ticketsAttachments?: string; | |
4494 | - ticketsDetail?: string; | |
4490 | + ticketsList?: Array<TicketsVo>; | |
4495 | 4491 | ticketsStatus?: string; |
4496 | - ticketsType?: string; | |
4497 | 4492 | ticketsTypeText?: string; |
4498 | 4493 | /** |
4499 | 4494 | * @description |
... | ... | @@ -4624,10 +4619,22 @@ export interface InvoiceDetail { |
4624 | 4619 | |
4625 | 4620 | export interface InvoiceReissueRecord { |
4626 | 4621 | createByName?: string; |
4622 | + /** | |
4623 | + * @description | |
4624 | + * 创建人名称模糊查询 | |
4625 | + */ | |
4627 | 4626 | createByNameLike?: string; |
4628 | - /** @format date-time */ | |
4627 | + /** | |
4628 | + * @description | |
4629 | + * 创建时间大于等于 | |
4630 | + * @format date-time | |
4631 | + */ | |
4629 | 4632 | createDatetimeGe?: string; |
4630 | - /** @format date-time */ | |
4633 | + /** | |
4634 | + * @description | |
4635 | + * 创建时间小于等于 | |
4636 | + * @format date-time | |
4637 | + */ | |
4631 | 4638 | createDatetimeLe?: string; |
4632 | 4639 | /** @format date-time */ |
4633 | 4640 | createTime?: string; |
... | ... | @@ -4635,24 +4642,61 @@ export interface InvoiceReissueRecord { |
4635 | 4642 | current?: number; |
4636 | 4643 | /** @format int32 */ |
4637 | 4644 | end?: number; |
4645 | + /** | |
4646 | + * @description | |
4647 | + * 财务经理 | |
4648 | + */ | |
4638 | 4649 | financeManager?: string; |
4639 | - /** @format date-time */ | |
4650 | + /** | |
4651 | + * @description | |
4652 | + * 冲红时间 | |
4653 | + * @format date-time | |
4654 | + */ | |
4640 | 4655 | flushDatetime?: string; |
4641 | - /** @format date-time */ | |
4656 | + /** | |
4657 | + * @description | |
4658 | + * 冲红时间大于等于 | |
4659 | + * @format date-time | |
4660 | + */ | |
4642 | 4661 | flushDatetimeGe?: string; |
4643 | - /** @format date-time */ | |
4662 | + /** | |
4663 | + * @description | |
4664 | + * 冲红时间小于等于 | |
4665 | + * @format date-time | |
4666 | + */ | |
4644 | 4667 | flushDatetimeLe?: string; |
4668 | + /** | |
4669 | + * @description | |
4670 | + * 冲红状态 | |
4671 | + */ | |
4645 | 4672 | flushStatus?: string; |
4646 | 4673 | flushStatusText?: string; |
4647 | - /** @format int64 */ | |
4674 | + /** | |
4675 | + * @description | |
4676 | + * 主键ID | |
4677 | + * @format int64 | |
4678 | + */ | |
4648 | 4679 | id?: number; |
4649 | 4680 | idIn?: Array<number>; |
4681 | + /** | |
4682 | + * @description | |
4683 | + * 发票ID列表 | |
4684 | + */ | |
4650 | 4685 | invoiceIdIn?: Array<string>; |
4651 | 4686 | invoiceIds?: Array<number>; |
4687 | + /** | |
4688 | + * @description | |
4689 | + * 发票号码 | |
4690 | + */ | |
4652 | 4691 | invoiceNumber?: string; |
4653 | 4692 | invoiceNumbers?: Array<string>; |
4654 | 4693 | logicDelete?: boolean; |
4655 | 4694 | notes?: string; |
4695 | + /** | |
4696 | + * @description | |
4697 | + * 备注 | |
4698 | + */ | |
4699 | + notesLike?: string; | |
4656 | 4700 | /** @format int32 */ |
4657 | 4701 | pageSize?: number; |
4658 | 4702 | passed?: boolean; |
... | ... | @@ -4661,6 +4705,10 @@ export interface InvoiceReissueRecord { |
4661 | 4705 | reissueStatus?: string; |
4662 | 4706 | /** @format int32 */ |
4663 | 4707 | start?: number; |
4708 | + /** | |
4709 | + * @description | |
4710 | + * 审核状态 | |
4711 | + */ | |
4664 | 4712 | status?: string; |
4665 | 4713 | statusText?: string; |
4666 | 4714 | /** @format int32 */ | ... | ... |
src/services/request.ts
... | ... | @@ -5919,77 +5919,6 @@ export const postOrderErpAuthGenerateToken = /* #__PURE__ */ (() => { |
5919 | 5919 | return request; |
5920 | 5920 | })(); |
5921 | 5921 | |
5922 | -/** @description request parameter type for postOrderErpAuthGenerateToken */ | |
5923 | -export interface PostOrderErpAuthGenerateTokenOption { | |
5924 | - /** | |
5925 | - * @description | |
5926 | - * tokenApiDto | |
5927 | - */ | |
5928 | - body: { | |
5929 | - /** | |
5930 | - @description | |
5931 | - tokenApiDto */ | |
5932 | - tokenApiDto: TokenApiDto; | |
5933 | - }; | |
5934 | -} | |
5935 | - | |
5936 | -/** @description response type for postOrderErpAuthGenerateToken */ | |
5937 | -export interface PostOrderErpAuthGenerateTokenResponse { | |
5938 | - /** | |
5939 | - * @description | |
5940 | - * OK | |
5941 | - */ | |
5942 | - 200: ServerResult; | |
5943 | - /** | |
5944 | - * @description | |
5945 | - * Created | |
5946 | - */ | |
5947 | - 201: any; | |
5948 | - /** | |
5949 | - * @description | |
5950 | - * Unauthorized | |
5951 | - */ | |
5952 | - 401: any; | |
5953 | - /** | |
5954 | - * @description | |
5955 | - * Forbidden | |
5956 | - */ | |
5957 | - 403: any; | |
5958 | - /** | |
5959 | - * @description | |
5960 | - * Not Found | |
5961 | - */ | |
5962 | - 404: any; | |
5963 | -} | |
5964 | - | |
5965 | -export type PostOrderErpAuthGenerateTokenResponseSuccess = | |
5966 | - PostOrderErpAuthGenerateTokenResponse[200]; | |
5967 | -/** | |
5968 | - * @description | |
5969 | - * 生成token | |
5970 | - * @tags login-controller | |
5971 | - * @produces * | |
5972 | - * @consumes application/json | |
5973 | - */ | |
5974 | -export const postOrderErpAuthGenerateToken = /* #__PURE__ */ (() => { | |
5975 | - const method = 'post'; | |
5976 | - const url = '/order/erp/auth/generateToken'; | |
5977 | - function request( | |
5978 | - option: PostOrderErpAuthGenerateTokenOption, | |
5979 | - ): Promise<PostOrderErpAuthGenerateTokenResponseSuccess> { | |
5980 | - return requester(request.url, { | |
5981 | - method: request.method, | |
5982 | - ...option, | |
5983 | - }) as unknown as Promise<PostOrderErpAuthGenerateTokenResponseSuccess>; | |
5984 | - } | |
5985 | - | |
5986 | - /** http method */ | |
5987 | - request.method = method; | |
5988 | - /** request url */ | |
5989 | - request.url = url; | |
5990 | - return request; | |
5991 | -})(); | |
5992 | - | |
5993 | 5922 | /** @description request parameter type for postOrderErpAuthLoginByPhone */ |
5994 | 5923 | export interface PostOrderErpAuthLoginByPhoneOption { |
5995 | 5924 | /** |
... | ... | @@ -18227,6 +18156,77 @@ export const postServiceInvoiceReissueRecordDelete = /* #__PURE__ */ (() => { |
18227 | 18156 | return request; |
18228 | 18157 | })(); |
18229 | 18158 | |
18159 | +/** @description request parameter type for postServiceInvoiceReissueRecordFlush */ | |
18160 | +export interface PostServiceInvoiceReissueRecordFlushOption { | |
18161 | + /** | |
18162 | + * @description | |
18163 | + * dto | |
18164 | + */ | |
18165 | + body: { | |
18166 | + /** | |
18167 | + @description | |
18168 | + dto */ | |
18169 | + dto: InvoiceReissueRecord; | |
18170 | + }; | |
18171 | +} | |
18172 | + | |
18173 | +/** @description response type for postServiceInvoiceReissueRecordFlush */ | |
18174 | +export interface PostServiceInvoiceReissueRecordFlushResponse { | |
18175 | + /** | |
18176 | + * @description | |
18177 | + * OK | |
18178 | + */ | |
18179 | + 200: ServerResult; | |
18180 | + /** | |
18181 | + * @description | |
18182 | + * Created | |
18183 | + */ | |
18184 | + 201: any; | |
18185 | + /** | |
18186 | + * @description | |
18187 | + * Unauthorized | |
18188 | + */ | |
18189 | + 401: any; | |
18190 | + /** | |
18191 | + * @description | |
18192 | + * Forbidden | |
18193 | + */ | |
18194 | + 403: any; | |
18195 | + /** | |
18196 | + * @description | |
18197 | + * Not Found | |
18198 | + */ | |
18199 | + 404: any; | |
18200 | +} | |
18201 | + | |
18202 | +export type PostServiceInvoiceReissueRecordFlushResponseSuccess = | |
18203 | + PostServiceInvoiceReissueRecordFlushResponse[200]; | |
18204 | +/** | |
18205 | + * @description | |
18206 | + * flushReissueRecord | |
18207 | + * @tags 发票 | |
18208 | + * @produces * | |
18209 | + * @consumes application/json | |
18210 | + */ | |
18211 | +export const postServiceInvoiceReissueRecordFlush = /* #__PURE__ */ (() => { | |
18212 | + const method = 'post'; | |
18213 | + const url = '/service/invoice/reissueRecord/flush'; | |
18214 | + function request( | |
18215 | + option: PostServiceInvoiceReissueRecordFlushOption, | |
18216 | + ): Promise<PostServiceInvoiceReissueRecordFlushResponseSuccess> { | |
18217 | + return requester(request.url, { | |
18218 | + method: request.method, | |
18219 | + ...option, | |
18220 | + }) as unknown as Promise<PostServiceInvoiceReissueRecordFlushResponseSuccess>; | |
18221 | + } | |
18222 | + | |
18223 | + /** http method */ | |
18224 | + request.method = method; | |
18225 | + /** request url */ | |
18226 | + request.url = url; | |
18227 | + return request; | |
18228 | +})(); | |
18229 | + | |
18230 | 18230 | /** @description request parameter type for postServiceInvoiceReissueRecords */ |
18231 | 18231 | export interface PostServiceInvoiceReissueRecordsOption { |
18232 | 18232 | /** | ... | ... |