Commit 79e282c5df1cfd1cb4ed3bb52f72e60f58e5f9aa

Authored by 曾国涛
1 parent a6c77b16

feat(invoice): optimize invoice components and add Chinese currency conversion utility

- Add dynamic invoice type display in Invoice.tsx.
- Refactor InvoiceDetailTable.tsx to simplify code and remove unnecessary comments.
- Optimize data processing and UI display in InvoiceModal.tsx.
- Improve component structure and add orderId mapping in InvoiceRecordDetailModal.tsx.
- Enhance InvoicingDrawerForm.tsx with total price calculation and validation.- Implement Chinese currency conversion function in numberUtil.ts.
- Various code cleanups and documentation improvements.
src/pages/Invoice/components/InvoicingModal.tsx
1 import { RESPONSE_CODE } from '@/constants/enum'; 1 import { RESPONSE_CODE } from '@/constants/enum';
2 -import { postServiceInvoiceInvoicing } from '@/services';  
3 -import { ModalForm } from '@ant-design/pro-components'; 2 +import {
  3 + postServiceInvoiceGetInvoicingAccount,
  4 + postServiceInvoiceInvoicing,
  5 +} from '@/services';
  6 +import { ModalForm, ProFormSelect } from '@ant-design/pro-components';
4 import { Button, Form, message } from 'antd'; 7 import { Button, Form, message } from 'antd';
5 8
6 export default ({ selectedRowKeys, reloadRecordTable }) => { 9 export default ({ selectedRowKeys, reloadRecordTable }) => {
@@ -23,9 +26,10 @@ export default ({ selectedRowKeys, reloadRecordTable }) => { @@ -23,9 +26,10 @@ export default ({ selectedRowKeys, reloadRecordTable }) => {
23 onCancel: () => console.log('run'), 26 onCancel: () => console.log('run'),
24 }} 27 }}
25 submitTimeout={2000} 28 submitTimeout={2000}
26 - onFinish={async () => { 29 + onFinish={async (values) => {
27 let res = await postServiceInvoiceInvoicing({ 30 let res = await postServiceInvoiceInvoicing({
28 data: { 31 data: {
  32 + ...values,
29 invoiceRecordIds: selectedRowKeys, 33 invoiceRecordIds: selectedRowKeys,
30 }, 34 },
31 }); 35 });
@@ -36,6 +40,22 @@ export default ({ selectedRowKeys, reloadRecordTable }) => { @@ -36,6 +40,22 @@ export default ({ selectedRowKeys, reloadRecordTable }) => {
36 message.success('提交成功'); 40 message.success('提交成功');
37 return true; 41 return true;
38 }} 42 }}
39 - ></ModalForm> 43 + >
  44 + <ProFormSelect
  45 + name="invoicingAccount"
  46 + label="开票账号"
  47 + request={async () => {
  48 + const res = await postServiceInvoiceGetInvoicingAccount();
  49 + return res.data.map((item) => {
  50 + return {
  51 + label: item.accountText,
  52 + value: item.account,
  53 + };
  54 + });
  55 + }}
  56 + placeholder="请选择开票账号"
  57 + rules={[{ required: true, message: '请选择开票账号!' }]}
  58 + />
  59 + </ModalForm>
40 ); 60 );
41 }; 61 };
src/services/definition.ts
@@ -221,6 +221,21 @@ export interface AdminDeptVO { @@ -221,6 +221,21 @@ export interface AdminDeptVO {
221 pid?: number; 221 pid?: number;
222 } 222 }
223 223
  224 +export interface AdminInvoicingAccountDto {
  225 + account?: string;
  226 + createByName?: string;
  227 + /** @format date-time */
  228 + createTime?: string;
  229 + /** @format int64 */
  230 + id?: number;
  231 + logicDelete?: boolean;
  232 + password?: string;
  233 + updateByName?: string;
  234 + /** @format date-time */
  235 + updateTime?: string;
  236 + userNames?: Array<string>;
  237 +}
  238 +
224 export interface AdminJobQueryVO { 239 export interface AdminJobQueryVO {
225 /** @format int32 */ 240 /** @format int32 */
226 current?: number; 241 current?: number;
src/services/request.ts
@@ -9,6 +9,7 @@ import type { @@ -9,6 +9,7 @@ import type {
9 AdminClientDto, 9 AdminClientDto,
10 AdminDeptQueryVO, 10 AdminDeptQueryVO,
11 AdminDeptVO, 11 AdminDeptVO,
  12 + AdminInvoicingAccountDto,
12 AdminJobQueryVO, 13 AdminJobQueryVO,
13 AdminJobVO, 14 AdminJobVO,
14 AdminMenuQueryVO, 15 AdminMenuQueryVO,
@@ -62,6 +63,7 @@ import type { @@ -62,6 +63,7 @@ import type {
62 MaterialUnitListRes, 63 MaterialUnitListRes,
63 MeasureUnitListRes, 64 MeasureUnitListRes,
64 MessageQueryDTO, 65 MessageQueryDTO,
  66 + ModelAndView,
65 OrderAddVO, 67 OrderAddVO,
66 OrderAuditLogQueryVO, 68 OrderAuditLogQueryVO,
67 OrderBaseInfoQueryVO, 69 OrderBaseInfoQueryVO,
@@ -3170,9 +3172,7 @@ export interface GetErrorResponse { @@ -3170,9 +3172,7 @@ export interface GetErrorResponse {
3170 * @description 3172 * @description
3171 * OK 3173 * OK
3172 */ 3174 */
3173 - 200: {  
3174 - [propertyName: string]: any;  
3175 - }; 3175 + 200: ModelAndView;
3176 /** 3176 /**
3177 * @description 3177 * @description
3178 * Unauthorized 3178 * Unauthorized
@@ -3193,9 +3193,9 @@ export interface GetErrorResponse { @@ -3193,9 +3193,9 @@ export interface GetErrorResponse {
3193 export type GetErrorResponseSuccess = GetErrorResponse[200]; 3193 export type GetErrorResponseSuccess = GetErrorResponse[200];
3194 /** 3194 /**
3195 * @description 3195 * @description
3196 - * error 3196 + * errorHtml
3197 * @tags basic-error-controller 3197 * @tags basic-error-controller
3198 - * @produces * 3198 + * @produces text/html
3199 */ 3199 */
3200 export const getError = /* #__PURE__ */ (() => { 3200 export const getError = /* #__PURE__ */ (() => {
3201 const method = 'get'; 3201 const method = 'get';
@@ -3219,9 +3219,7 @@ export interface PutErrorResponse { @@ -3219,9 +3219,7 @@ export interface PutErrorResponse {
3219 * @description 3219 * @description
3220 * OK 3220 * OK
3221 */ 3221 */
3222 - 200: {  
3223 - [propertyName: string]: any;  
3224 - }; 3222 + 200: ModelAndView;
3225 /** 3223 /**
3226 * @description 3224 * @description
3227 * Created 3225 * Created
@@ -3247,9 +3245,9 @@ export interface PutErrorResponse { @@ -3247,9 +3245,9 @@ export interface PutErrorResponse {
3247 export type PutErrorResponseSuccess = PutErrorResponse[200]; 3245 export type PutErrorResponseSuccess = PutErrorResponse[200];
3248 /** 3246 /**
3249 * @description 3247 * @description
3250 - * error 3248 + * errorHtml
3251 * @tags basic-error-controller 3249 * @tags basic-error-controller
3252 - * @produces * 3250 + * @produces text/html
3253 * @consumes application/json 3251 * @consumes application/json
3254 */ 3252 */
3255 export const putError = /* #__PURE__ */ (() => { 3253 export const putError = /* #__PURE__ */ (() => {
@@ -3274,9 +3272,7 @@ export interface PostErrorResponse { @@ -3274,9 +3272,7 @@ export interface PostErrorResponse {
3274 * @description 3272 * @description
3275 * OK 3273 * OK
3276 */ 3274 */
3277 - 200: {  
3278 - [propertyName: string]: any;  
3279 - }; 3275 + 200: ModelAndView;
3280 /** 3276 /**
3281 * @description 3277 * @description
3282 * Created 3278 * Created
@@ -3302,9 +3298,9 @@ export interface PostErrorResponse { @@ -3302,9 +3298,9 @@ export interface PostErrorResponse {
3302 export type PostErrorResponseSuccess = PostErrorResponse[200]; 3298 export type PostErrorResponseSuccess = PostErrorResponse[200];
3303 /** 3299 /**
3304 * @description 3300 * @description
3305 - * error 3301 + * errorHtml
3306 * @tags basic-error-controller 3302 * @tags basic-error-controller
3307 - * @produces * 3303 + * @produces text/html
3308 * @consumes application/json 3304 * @consumes application/json
3309 */ 3305 */
3310 export const postError = /* #__PURE__ */ (() => { 3306 export const postError = /* #__PURE__ */ (() => {
@@ -3329,9 +3325,7 @@ export interface DeleteErrorResponse { @@ -3329,9 +3325,7 @@ export interface DeleteErrorResponse {
3329 * @description 3325 * @description
3330 * OK 3326 * OK
3331 */ 3327 */
3332 - 200: {  
3333 - [propertyName: string]: any;  
3334 - }; 3328 + 200: ModelAndView;
3335 /** 3329 /**
3336 * @description 3330 * @description
3337 * No Content 3331 * No Content
@@ -3352,9 +3346,9 @@ export interface DeleteErrorResponse { @@ -3352,9 +3346,9 @@ export interface DeleteErrorResponse {
3352 export type DeleteErrorResponseSuccess = DeleteErrorResponse[200]; 3346 export type DeleteErrorResponseSuccess = DeleteErrorResponse[200];
3353 /** 3347 /**
3354 * @description 3348 * @description
3355 - * error 3349 + * errorHtml
3356 * @tags basic-error-controller 3350 * @tags basic-error-controller
3357 - * @produces * 3351 + * @produces text/html
3358 */ 3352 */
3359 export const deleteError = /* #__PURE__ */ (() => { 3353 export const deleteError = /* #__PURE__ */ (() => {
3360 const method = 'delete'; 3354 const method = 'delete';
@@ -3378,9 +3372,7 @@ export interface OptionsErrorResponse { @@ -3378,9 +3372,7 @@ export interface OptionsErrorResponse {
3378 * @description 3372 * @description
3379 * OK 3373 * OK
3380 */ 3374 */
3381 - 200: {  
3382 - [propertyName: string]: any;  
3383 - }; 3375 + 200: ModelAndView;
3384 /** 3376 /**
3385 * @description 3377 * @description
3386 * No Content 3378 * No Content
@@ -3401,9 +3393,9 @@ export interface OptionsErrorResponse { @@ -3401,9 +3393,9 @@ export interface OptionsErrorResponse {
3401 export type OptionsErrorResponseSuccess = OptionsErrorResponse[200]; 3393 export type OptionsErrorResponseSuccess = OptionsErrorResponse[200];
3402 /** 3394 /**
3403 * @description 3395 * @description
3404 - * error 3396 + * errorHtml
3405 * @tags basic-error-controller 3397 * @tags basic-error-controller
3406 - * @produces * 3398 + * @produces text/html
3407 * @consumes application/json 3399 * @consumes application/json
3408 */ 3400 */
3409 export const optionsError = /* #__PURE__ */ (() => { 3401 export const optionsError = /* #__PURE__ */ (() => {
@@ -3428,9 +3420,7 @@ export interface HeadErrorResponse { @@ -3428,9 +3420,7 @@ export interface HeadErrorResponse {
3428 * @description 3420 * @description
3429 * OK 3421 * OK
3430 */ 3422 */
3431 - 200: {  
3432 - [propertyName: string]: any;  
3433 - }; 3423 + 200: ModelAndView;
3434 /** 3424 /**
3435 * @description 3425 * @description
3436 * No Content 3426 * No Content
@@ -3451,9 +3441,9 @@ export interface HeadErrorResponse { @@ -3451,9 +3441,9 @@ export interface HeadErrorResponse {
3451 export type HeadErrorResponseSuccess = HeadErrorResponse[200]; 3441 export type HeadErrorResponseSuccess = HeadErrorResponse[200];
3452 /** 3442 /**
3453 * @description 3443 * @description
3454 - * error 3444 + * errorHtml
3455 * @tags basic-error-controller 3445 * @tags basic-error-controller
3456 - * @produces * 3446 + * @produces text/html
3457 * @consumes application/json 3447 * @consumes application/json
3458 */ 3448 */
3459 export const headError = /* #__PURE__ */ (() => { 3449 export const headError = /* #__PURE__ */ (() => {
@@ -3478,9 +3468,7 @@ export interface PatchErrorResponse { @@ -3478,9 +3468,7 @@ export interface PatchErrorResponse {
3478 * @description 3468 * @description
3479 * OK 3469 * OK
3480 */ 3470 */
3481 - 200: {  
3482 - [propertyName: string]: any;  
3483 - }; 3471 + 200: ModelAndView;
3484 /** 3472 /**
3485 * @description 3473 * @description
3486 * No Content 3474 * No Content
@@ -3501,9 +3489,9 @@ export interface PatchErrorResponse { @@ -3501,9 +3489,9 @@ export interface PatchErrorResponse {
3501 export type PatchErrorResponseSuccess = PatchErrorResponse[200]; 3489 export type PatchErrorResponseSuccess = PatchErrorResponse[200];
3502 /** 3490 /**
3503 * @description 3491 * @description
3504 - * error 3492 + * errorHtml
3505 * @tags basic-error-controller 3493 * @tags basic-error-controller
3506 - * @produces * 3494 + * @produces text/html
3507 * @consumes application/json 3495 * @consumes application/json
3508 */ 3496 */
3509 export const patchError = /* #__PURE__ */ (() => { 3497 export const patchError = /* #__PURE__ */ (() => {
@@ -12418,6 +12406,77 @@ export const postServiceInvoiceAddInvoice = /* #__PURE__ */ (() =&gt; { @@ -12418,6 +12406,77 @@ export const postServiceInvoiceAddInvoice = /* #__PURE__ */ (() =&gt; {
12418 return request; 12406 return request;
12419 })(); 12407 })();
12420 12408
  12409 +/** @description request parameter type for postServiceInvoiceAddInvoicingAccount */
  12410 +export interface PostServiceInvoiceAddInvoicingAccountOption {
  12411 + /**
  12412 + * @description
  12413 + * dto
  12414 + */
  12415 + body: {
  12416 + /**
  12417 + @description
  12418 + dto */
  12419 + dto: AdminInvoicingAccountDto;
  12420 + };
  12421 +}
  12422 +
  12423 +/** @description response type for postServiceInvoiceAddInvoicingAccount */
  12424 +export interface PostServiceInvoiceAddInvoicingAccountResponse {
  12425 + /**
  12426 + * @description
  12427 + * OK
  12428 + */
  12429 + 200: ServerResult;
  12430 + /**
  12431 + * @description
  12432 + * Created
  12433 + */
  12434 + 201: any;
  12435 + /**
  12436 + * @description
  12437 + * Unauthorized
  12438 + */
  12439 + 401: any;
  12440 + /**
  12441 + * @description
  12442 + * Forbidden
  12443 + */
  12444 + 403: any;
  12445 + /**
  12446 + * @description
  12447 + * Not Found
  12448 + */
  12449 + 404: any;
  12450 +}
  12451 +
  12452 +export type PostServiceInvoiceAddInvoicingAccountResponseSuccess =
  12453 + PostServiceInvoiceAddInvoicingAccountResponse[200];
  12454 +/**
  12455 + * @description
  12456 + * 添加开票账号
  12457 + * @tags 发票
  12458 + * @produces *
  12459 + * @consumes application/json
  12460 + */
  12461 +export const postServiceInvoiceAddInvoicingAccount = /* #__PURE__ */ (() => {
  12462 + const method = 'post';
  12463 + const url = '/service/invoice/addInvoicingAccount';
  12464 + function request(
  12465 + option: PostServiceInvoiceAddInvoicingAccountOption,
  12466 + ): Promise<PostServiceInvoiceAddInvoicingAccountResponseSuccess> {
  12467 + return requester(request.url, {
  12468 + method: request.method,
  12469 + ...option,
  12470 + }) as unknown as Promise<PostServiceInvoiceAddInvoicingAccountResponseSuccess>;
  12471 + }
  12472 +
  12473 + /** http method */
  12474 + request.method = method;
  12475 + /** request url */
  12476 + request.url = url;
  12477 + return request;
  12478 +})();
  12479 +
12421 /** @description request parameter type for postServiceInvoiceApplyInvoice */ 12480 /** @description request parameter type for postServiceInvoiceApplyInvoice */
12422 export interface PostServiceInvoiceApplyInvoiceOption { 12481 export interface PostServiceInvoiceApplyInvoiceOption {
12423 /** 12482 /**
@@ -13182,6 +13241,60 @@ export const postServiceInvoiceGetInvoiceRecord = /* #__PURE__ */ (() =&gt; { @@ -13182,6 +13241,60 @@ export const postServiceInvoiceGetInvoiceRecord = /* #__PURE__ */ (() =&gt; {
13182 return request; 13241 return request;
13183 })(); 13242 })();
13184 13243
  13244 +/** @description response type for postServiceInvoiceGetInvoicingAccount */
  13245 +export interface PostServiceInvoiceGetInvoicingAccountResponse {
  13246 + /**
  13247 + * @description
  13248 + * OK
  13249 + */
  13250 + 200: ServerResult;
  13251 + /**
  13252 + * @description
  13253 + * Created
  13254 + */
  13255 + 201: any;
  13256 + /**
  13257 + * @description
  13258 + * Unauthorized
  13259 + */
  13260 + 401: any;
  13261 + /**
  13262 + * @description
  13263 + * Forbidden
  13264 + */
  13265 + 403: any;
  13266 + /**
  13267 + * @description
  13268 + * Not Found
  13269 + */
  13270 + 404: any;
  13271 +}
  13272 +
  13273 +export type PostServiceInvoiceGetInvoicingAccountResponseSuccess =
  13274 + PostServiceInvoiceGetInvoicingAccountResponse[200];
  13275 +/**
  13276 + * @description
  13277 + * 获取开票账号
  13278 + * @tags 发票
  13279 + * @produces *
  13280 + * @consumes application/json
  13281 + */
  13282 +export const postServiceInvoiceGetInvoicingAccount = /* #__PURE__ */ (() => {
  13283 + const method = 'post';
  13284 + const url = '/service/invoice/getInvoicingAccount';
  13285 + function request(): Promise<PostServiceInvoiceGetInvoicingAccountResponseSuccess> {
  13286 + return requester(request.url, {
  13287 + method: request.method,
  13288 + }) as unknown as Promise<PostServiceInvoiceGetInvoicingAccountResponseSuccess>;
  13289 + }
  13290 +
  13291 + /** http method */
  13292 + request.method = method;
  13293 + /** request url */
  13294 + request.url = url;
  13295 + return request;
  13296 +})();
  13297 +
13185 /** @description request parameter type for postServiceInvoiceImportInvoiceDetails */ 13298 /** @description request parameter type for postServiceInvoiceImportInvoiceDetails */
13186 export interface PostServiceInvoiceImportInvoiceDetailsOption { 13299 export interface PostServiceInvoiceImportInvoiceDetailsOption {
13187 /** 13300 /**