Commit d9033a556587e1a994e038f364f05d38d9766998

Authored by 曾国涛
1 parent 0afddbf9

feat(invoice): 优化重开票功能和记录展示

- 在 ReissueModal 组件中添加 disable 属性,根据选中项控制按钮状态
- 优化 ReissueRecord 组件中的发票号码展示,支持换行显示
-增加冲红功能相关逻辑和接口调用
- 调整日期时间范围查询,提高搜索准确性
- 优化备注字段展示,支持模糊查询
.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 }) =&gt; {
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 = () =&gt; {
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 = () =&gt; {
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 }) =&gt; {
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 &#39;@/components/ButtomConfirm&#39;;
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 () =&gt; {
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 () =&gt; {
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 () =&gt; {
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 () =&gt; {
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 () =&gt; {
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__ */ (() =&gt; {
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__ */ (() =&gt; {
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 /**
... ...