Commit 72eafa8886bb93091894fac7278e204a6a9c4adc

Authored by 曾国涛
1 parent 2333927a

feat: 子订单重新开票bug修复

src/pages/Invoice/components/InvoiceDetailTable.tsx
... ... @@ -88,7 +88,7 @@ export default ({ recordId, details, updateDetails, readOnly }) => {
88 88 {
89 89 title: '操作',
90 90 valueType: 'option',
91   - width: 250,
  91 + width: 100,
92 92 render: () => {
93 93 return null;
94 94 },
... ... @@ -131,7 +131,11 @@ export default ({ recordId, details, updateDetails, readOnly }) => {
131 131 onValuesChange: (record, recordList) => {
132 132 //修改recordList中tid为record.tid的元素,将它的specification属性设置为invoiceProject的specification属性
133 133 const records = recordList.map((item) => {
134   - if (record && item.tid === record.tid) {
  134 + if (
  135 + record &&
  136 + item.tid === record.tid &&
  137 + item.projectName !== record.projectName
  138 + ) {
135 139 item.projectName =
136 140 '*' +
137 141 invoiceProject.productAndServiceCatagoryAbbreviation +
... ...
src/pages/Invoice/components/InvoiceRecordDetailModal.tsx
... ... @@ -117,14 +117,14 @@ export default ({ id, setVisible }) => {
117 117 )}
118 118 </>,
119 119 /*<Button
120   - type={'default'}
121   - key="ok"
122   - onClick={() => {
123   - setVisible(false)
124   - }}
125   - >
126   - 取消
127   - </Button>,*/
  120 + type={'default'}
  121 + key="ok"
  122 + onClick={() => {
  123 + setVisible(false)
  124 + }}
  125 + >
  126 + 取消
  127 + </Button>,*/
128 128 ];
129 129 },
130 130 }}
... ...
src/pages/Order/components/CheckModal.tsx
... ... @@ -8,7 +8,11 @@ import {
8 8 postServiceOrderLeaderAudit,
9 9 postServiceOrderToProcureAudit,
10 10 } from '@/services';
11   -import { ModalForm, ProFormTextArea } from '@ant-design/pro-components';
  11 +import {
  12 + ModalForm,
  13 + ProFormTextArea,
  14 + ProList,
  15 +} from '@ant-design/pro-components';
12 16 import {
13 17 Button,
14 18 Col,
... ... @@ -17,6 +21,8 @@ import {
17 21 Image,
18 22 Modal,
19 23 Row,
  24 + Space,
  25 + Tag,
20 26 UploadFile,
21 27 message,
22 28 } from 'antd';
... ... @@ -28,6 +34,7 @@ import {
28 34 COMFIR_RECEIPT_IMAGES_NUMBER,
29 35 } from '../constant';
30 36 // import { cloneDeep } from 'lodash';
  37 +import InvoiceSubOrderInfoTable from '@/pages/Order/components/InvoiceSubOrderInfoTable';
31 38 import { enumValueToLabel, transImageFile } from '@/utils';
32 39 import { PlusOutlined } from '@ant-design/icons';
33 40 import { cloneDeep } from 'lodash';
... ... @@ -62,7 +69,6 @@ export default ({
62 69  
63 70 const [afterSalesInfo, setAfterSalesInfo] = useState<any>();
64 71 const [prepaidProofImages, setPrepaidProofImages] = useState<any[]>([]);
65   -
66 72 /**
67 73 * 审核类型
68 74 */
... ... @@ -674,6 +680,57 @@ export default ({
674 680 ) : (
675 681 ''
676 682 )}
  683 + {checkType(CHECK_TYPE.CONFIRM_REISSUE) && (
  684 + <>
  685 + <InvoiceSubOrderInfoTable
  686 + subOrderIds={subOrderIds}
  687 + ></InvoiceSubOrderInfoTable>
  688 + </>
  689 + )}
  690 + {checkType(CHECK_TYPE.URGENT_INVOICE_AUDITING) ? (
  691 + <>
  692 + <ProList
  693 + rowKey="id"
  694 + headerTitle="发票信息"
  695 + metas={{
  696 + title: {
  697 + dataIndex: 'name',
  698 + },
  699 + avatar: {
  700 + dataIndex: 'image',
  701 + editable: false,
  702 + },
  703 + description: {
  704 + dataIndex: 'desc',
  705 + },
  706 + subTitle: {
  707 + render: () => {
  708 + return (
  709 + <Space size={0}>
  710 + <Tag color="blue">Ant Design</Tag>
  711 + <Tag color="#5BD8A6">TechUI</Tag>
  712 + </Space>
  713 + );
  714 + },
  715 + },
  716 + actions: {
  717 + render: (text, row, index, action) => [
  718 + <a
  719 + onClick={() => {
  720 + action?.startEditable(row.id);
  721 + }}
  722 + key="link"
  723 + >
  724 + 编辑
  725 + </a>,
  726 + ],
  727 + },
  728 + }}
  729 + ></ProList>
  730 + </>
  731 + ) : (
  732 + ''
  733 + )}
677 734 </ModalForm>
678 735  
679 736 <Modal
... ...
src/pages/Order/components/InvoiceSubOrderInfoTable.tsx 0 → 100644
  1 +import { postServiceOrderGetReissueInfo } from '@/services';
  2 +import type { ProColumns } from '@ant-design/pro-components';
  3 +import { ProTable } from '@ant-design/pro-components';
  4 +import { Button, Divider } from 'antd';
  5 +import { useEffect, useState } from 'react';
  6 +
  7 +const columns: ProColumns[] = [
  8 + {
  9 + title: '发票号码',
  10 + width: 80,
  11 + dataIndex: 'invoiceNumber',
  12 + render: (_) => _,
  13 + },
  14 + {
  15 + title: '关联订单',
  16 + dataIndex: 'subOrderIds',
  17 + render: (_, { subOrderIds }) => {
  18 + console.log(JSON.stringify(_));
  19 + console.log(JSON.stringify(subOrderIds));
  20 + return (
  21 + <>
  22 + {subOrderIds.map((subOrderId, index) => {
  23 + return (
  24 + <>
  25 + <Button
  26 + key={index}
  27 + className="pl-1 pr-0"
  28 + type="link"
  29 + target="_blank"
  30 + href={'/order?id=' + subOrderId}
  31 + >
  32 + {subOrderId}
  33 + </Button>
  34 + <Divider type="vertical" />
  35 + </>
  36 + );
  37 + })}
  38 + </>
  39 + );
  40 + },
  41 + },
  42 +];
  43 +
  44 +export default ({ subOrderIds }) => {
  45 + const [reissueInfos, setReissueInfos] = useState([]);
  46 + useEffect(() => {
  47 + console.log('info');
  48 + const getReissueInfo = async () => {
  49 + let res = await postServiceOrderGetReissueInfo({
  50 + data: subOrderIds,
  51 + });
  52 + setReissueInfos(res.data);
  53 + };
  54 + getReissueInfo();
  55 + }, []);
  56 + return (
  57 + <ProTable
  58 + dataSource={reissueInfos}
  59 + rowKey="key"
  60 + pagination={false}
  61 + size={'small'}
  62 + //设置左右下边距为0
  63 + options={false}
  64 + columns={columns}
  65 + search={false}
  66 + dateFormatter="string"
  67 + headerTitle="发票信息"
  68 + />
  69 + );
  70 +};
... ...
src/pages/Order/components/InvoicingDrawerForm.tsx
... ... @@ -258,7 +258,11 @@ export default ({ dataList, mainOrder, setVisible, onClose }) =&gt; {
258 258 let options = res?.data?.map((c: any) => {
259 259 return {
260 260 ...c,
261   - label: c.name,
  261 + label:
  262 + '*' +
  263 + c.productAndServiceCatagoryAbbreviation +
  264 + '*' +
  265 + c.name,
262 266 value:
263 267 '*' +
264 268 c.productAndServiceCatagoryAbbreviation +
... ...
src/pages/Order/index.tsx
... ... @@ -1304,7 +1304,7 @@ const OrderPage = () =&gt; {
1304 1304 type="link"
1305 1305 onClick={() => {
1306 1306 setCurrentMainId(record.id);
1307   - setCurretnOptSubId(optRecord.mainOrderId);
  1307 + setCurretnOptSubId(optRecord.id);
1308 1308 setReissueVisible(true);
1309 1309 }}
1310 1310 >
... ... @@ -4074,39 +4074,39 @@ const OrderPage = () =&gt; {
4074 4074 //导出按钮配置
4075 4075 const auditItems: MenuProps['items'] = [
4076 4076 {
4077   - label: '领导审核',
4078   - key: '2',
  4077 + label: '后置审核',
  4078 + key: '1',
4079 4079 onClick: async () => {
4080 4080 setIsMainOrder(true);
4081 4081 setCheckVisible(true);
4082   - setOrderCheckType(CHECK_TYPE.LEADER_AUDIT);
  4082 + setOrderCheckType(CHECK_TYPE.WAITING_FOR_POST_AUDIT);
4083 4083 },
4084 4084 },
4085 4085 {
4086   - label: '后置审核',
4087   - key: '1',
  4086 + label: '加急开票审核',
  4087 + key: '2',
4088 4088 onClick: async () => {
4089 4089 setIsMainOrder(true);
4090 4090 setCheckVisible(true);
4091   - setOrderCheckType(CHECK_TYPE.WAITING_FOR_POST_AUDIT);
  4091 + setOrderCheckType(CHECK_TYPE.URGENT_INVOICE_AUDITING);
4092 4092 },
4093 4093 },
4094 4094 {
4095   - label: '修改申请审核',
  4095 + label: '领导审核',
4096 4096 key: '3',
4097 4097 onClick: async () => {
4098 4098 setIsMainOrder(true);
4099 4099 setCheckVisible(true);
4100   - setOrderCheckType(CHECK_TYPE.MODIFY_APPLY_WAIT_FOR_AUDIT);
  4100 + setOrderCheckType(CHECK_TYPE.LEADER_AUDIT);
4101 4101 },
4102 4102 },
4103 4103 {
4104   - label: '加急开票审核',
  4104 + label: '修改申请审核',
4105 4105 key: '4',
4106 4106 onClick: async () => {
4107 4107 setIsMainOrder(true);
4108 4108 setCheckVisible(true);
4109   - setOrderCheckType(CHECK_TYPE.URGENT_INVOICE_AUDITING);
  4109 + setOrderCheckType(CHECK_TYPE.MODIFY_APPLY_WAIT_FOR_AUDIT);
4110 4110 },
4111 4111 },
4112 4112 ];
... ... @@ -4813,7 +4813,6 @@ const OrderPage = () =&gt; {
4813 4813 clearOptObject();
4814 4814 }
4815 4815 }}
4816   - mainOrder={buildMainOrder()}
4817 4816 subOrders={
4818 4817 isMainOrder
4819 4818 ? [...subOrderSelectedMap.values()].flat()
... ...
src/services/definition.ts
... ... @@ -1243,6 +1243,11 @@ export interface InvoiceDto {
1243 1243 * 状态
1244 1244 */
1245 1245 status?: string;
  1246 + /**
  1247 + * @description
  1248 + * 关联子订单id
  1249 + */
  1250 + subOrderIds?: Array<number>;
1246 1251 }
1247 1252  
1248 1253 export interface InvoiceRecordDto {
... ...
src/services/request.ts
... ... @@ -56,6 +56,7 @@ import type {
56 56 MaterialUnitListRes,
57 57 MeasureUnitListRes,
58 58 MessageQueryDTO,
  59 + ModelAndView,
59 60 OrderAddVO,
60 61 OrderAuditLogQueryVO,
61 62 OrderBaseInfoQueryVO,
... ... @@ -1773,9 +1774,7 @@ export interface GetErrorResponse {
1773 1774 * @description
1774 1775 * OK
1775 1776 */
1776   - 200: {
1777   - [propertyName: string]: any;
1778   - };
  1777 + 200: ModelAndView;
1779 1778 /**
1780 1779 * @description
1781 1780 * Unauthorized
... ... @@ -1796,9 +1795,9 @@ export interface GetErrorResponse {
1796 1795 export type GetErrorResponseSuccess = GetErrorResponse[200];
1797 1796 /**
1798 1797 * @description
1799   - * error
  1798 + * errorHtml
1800 1799 * @tags basic-error-controller
1801   - * @produces *
  1800 + * @produces text/html
1802 1801 */
1803 1802 export const getError = /* #__PURE__ */ (() => {
1804 1803 const method = 'get';
... ... @@ -1822,9 +1821,7 @@ export interface PutErrorResponse {
1822 1821 * @description
1823 1822 * OK
1824 1823 */
1825   - 200: {
1826   - [propertyName: string]: any;
1827   - };
  1824 + 200: ModelAndView;
1828 1825 /**
1829 1826 * @description
1830 1827 * Created
... ... @@ -1850,9 +1847,9 @@ export interface PutErrorResponse {
1850 1847 export type PutErrorResponseSuccess = PutErrorResponse[200];
1851 1848 /**
1852 1849 * @description
1853   - * error
  1850 + * errorHtml
1854 1851 * @tags basic-error-controller
1855   - * @produces *
  1852 + * @produces text/html
1856 1853 * @consumes application/json
1857 1854 */
1858 1855 export const putError = /* #__PURE__ */ (() => {
... ... @@ -1877,9 +1874,7 @@ export interface PostErrorResponse {
1877 1874 * @description
1878 1875 * OK
1879 1876 */
1880   - 200: {
1881   - [propertyName: string]: any;
1882   - };
  1877 + 200: ModelAndView;
1883 1878 /**
1884 1879 * @description
1885 1880 * Created
... ... @@ -1905,9 +1900,9 @@ export interface PostErrorResponse {
1905 1900 export type PostErrorResponseSuccess = PostErrorResponse[200];
1906 1901 /**
1907 1902 * @description
1908   - * error
  1903 + * errorHtml
1909 1904 * @tags basic-error-controller
1910   - * @produces *
  1905 + * @produces text/html
1911 1906 * @consumes application/json
1912 1907 */
1913 1908 export const postError = /* #__PURE__ */ (() => {
... ... @@ -1932,9 +1927,7 @@ export interface DeleteErrorResponse {
1932 1927 * @description
1933 1928 * OK
1934 1929 */
1935   - 200: {
1936   - [propertyName: string]: any;
1937   - };
  1930 + 200: ModelAndView;
1938 1931 /**
1939 1932 * @description
1940 1933 * No Content
... ... @@ -1955,9 +1948,9 @@ export interface DeleteErrorResponse {
1955 1948 export type DeleteErrorResponseSuccess = DeleteErrorResponse[200];
1956 1949 /**
1957 1950 * @description
1958   - * error
  1951 + * errorHtml
1959 1952 * @tags basic-error-controller
1960   - * @produces *
  1953 + * @produces text/html
1961 1954 */
1962 1955 export const deleteError = /* #__PURE__ */ (() => {
1963 1956 const method = 'delete';
... ... @@ -1981,9 +1974,7 @@ export interface OptionsErrorResponse {
1981 1974 * @description
1982 1975 * OK
1983 1976 */
1984   - 200: {
1985   - [propertyName: string]: any;
1986   - };
  1977 + 200: ModelAndView;
1987 1978 /**
1988 1979 * @description
1989 1980 * No Content
... ... @@ -2004,9 +1995,9 @@ export interface OptionsErrorResponse {
2004 1995 export type OptionsErrorResponseSuccess = OptionsErrorResponse[200];
2005 1996 /**
2006 1997 * @description
2007   - * error
  1998 + * errorHtml
2008 1999 * @tags basic-error-controller
2009   - * @produces *
  2000 + * @produces text/html
2010 2001 * @consumes application/json
2011 2002 */
2012 2003 export const optionsError = /* #__PURE__ */ (() => {
... ... @@ -2031,9 +2022,7 @@ export interface HeadErrorResponse {
2031 2022 * @description
2032 2023 * OK
2033 2024 */
2034   - 200: {
2035   - [propertyName: string]: any;
2036   - };
  2025 + 200: ModelAndView;
2037 2026 /**
2038 2027 * @description
2039 2028 * No Content
... ... @@ -2054,9 +2043,9 @@ export interface HeadErrorResponse {
2054 2043 export type HeadErrorResponseSuccess = HeadErrorResponse[200];
2055 2044 /**
2056 2045 * @description
2057   - * error
  2046 + * errorHtml
2058 2047 * @tags basic-error-controller
2059   - * @produces *
  2048 + * @produces text/html
2060 2049 * @consumes application/json
2061 2050 */
2062 2051 export const headError = /* #__PURE__ */ (() => {
... ... @@ -2081,9 +2070,7 @@ export interface PatchErrorResponse {
2081 2070 * @description
2082 2071 * OK
2083 2072 */
2084   - 200: {
2085   - [propertyName: string]: any;
2086   - };
  2073 + 200: ModelAndView;
2087 2074 /**
2088 2075 * @description
2089 2076 * No Content
... ... @@ -2104,9 +2091,9 @@ export interface PatchErrorResponse {
2104 2091 export type PatchErrorResponseSuccess = PatchErrorResponse[200];
2105 2092 /**
2106 2093 * @description
2107   - * error
  2094 + * errorHtml
2108 2095 * @tags basic-error-controller
2109   - * @produces *
  2096 + * @produces text/html
2110 2097 * @consumes application/json
2111 2098 */
2112 2099 export const patchError = /* #__PURE__ */ (() => {
... ... @@ -11815,77 +11802,6 @@ export const postServiceInvoiceReissue = /* #__PURE__ */ (() =&gt; {
11815 11802 return request;
11816 11803 })();
11817 11804  
11818   -/** @description request parameter type for postServiceInvoiceReissueAudit */
11819   -export interface PostServiceInvoiceReissueAuditOption {
11820   - /**
11821   - * @description
11822   - * dto
11823   - */
11824   - body: {
11825   - /**
11826   - @description
11827   - dto */
11828   - dto: AuditDto;
11829   - };
11830   -}
11831   -
11832   -/** @description response type for postServiceInvoiceReissueAudit */
11833   -export interface PostServiceInvoiceReissueAuditResponse {
11834   - /**
11835   - * @description
11836   - * OK
11837   - */
11838   - 200: ServerResult;
11839   - /**
11840   - * @description
11841   - * Created
11842   - */
11843   - 201: any;
11844   - /**
11845   - * @description
11846   - * Unauthorized
11847   - */
11848   - 401: any;
11849   - /**
11850   - * @description
11851   - * Forbidden
11852   - */
11853   - 403: any;
11854   - /**
11855   - * @description
11856   - * Not Found
11857   - */
11858   - 404: any;
11859   -}
11860   -
11861   -export type PostServiceInvoiceReissueAuditResponseSuccess =
11862   - PostServiceInvoiceReissueAuditResponse[200];
11863   -/**
11864   - * @description
11865   - * 重新开票审核
11866   - * @tags 发票
11867   - * @produces *
11868   - * @consumes application/json
11869   - */
11870   -export const postServiceInvoiceReissueAudit = /* #__PURE__ */ (() => {
11871   - const method = 'post';
11872   - const url = '/service/invoice/reissueAudit';
11873   - function request(
11874   - option: PostServiceInvoiceReissueAuditOption,
11875   - ): Promise<PostServiceInvoiceReissueAuditResponseSuccess> {
11876   - return requester(request.url, {
11877   - method: request.method,
11878   - ...option,
11879   - }) as unknown as Promise<PostServiceInvoiceReissueAuditResponseSuccess>;
11880   - }
11881   -
11882   - /** http method */
11883   - request.method = method;
11884   - /** request url */
11885   - request.url = url;
11886   - return request;
11887   -})();
11888   -
11889 11805 /** @description request parameter type for postServiceInvoiceUrgentInvoicing */
11890 11806 export interface PostServiceInvoiceUrgentInvoicingOption {
11891 11807 /**
... ... @@ -13233,6 +13149,77 @@ export const postServiceOrderFindServiceOrder = /* #__PURE__ */ (() =&gt; {
13233 13149 return request;
13234 13150 })();
13235 13151  
  13152 +/** @description request parameter type for postServiceOrderGetReissueInfo */
  13153 +export interface PostServiceOrderGetReissueInfoOption {
  13154 + /**
  13155 + * @description
  13156 + * ids
  13157 + */
  13158 + body: {
  13159 + /**
  13160 + @description
  13161 + ids */
  13162 + ids: Array<number>;
  13163 + };
  13164 +}
  13165 +
  13166 +/** @description response type for postServiceOrderGetReissueInfo */
  13167 +export interface PostServiceOrderGetReissueInfoResponse {
  13168 + /**
  13169 + * @description
  13170 + * OK
  13171 + */
  13172 + 200: ServerResult;
  13173 + /**
  13174 + * @description
  13175 + * Created
  13176 + */
  13177 + 201: any;
  13178 + /**
  13179 + * @description
  13180 + * Unauthorized
  13181 + */
  13182 + 401: any;
  13183 + /**
  13184 + * @description
  13185 + * Forbidden
  13186 + */
  13187 + 403: any;
  13188 + /**
  13189 + * @description
  13190 + * Not Found
  13191 + */
  13192 + 404: any;
  13193 +}
  13194 +
  13195 +export type PostServiceOrderGetReissueInfoResponseSuccess =
  13196 + PostServiceOrderGetReissueInfoResponse[200];
  13197 +/**
  13198 + * @description
  13199 + * 获取订单重新开票的发票信息
  13200 + * @tags 内部订单
  13201 + * @produces *
  13202 + * @consumes application/json
  13203 + */
  13204 +export const postServiceOrderGetReissueInfo = /* #__PURE__ */ (() => {
  13205 + const method = 'post';
  13206 + const url = '/service/order/getReissueInfo';
  13207 + function request(
  13208 + option: PostServiceOrderGetReissueInfoOption,
  13209 + ): Promise<PostServiceOrderGetReissueInfoResponseSuccess> {
  13210 + return requester(request.url, {
  13211 + method: request.method,
  13212 + ...option,
  13213 + }) as unknown as Promise<PostServiceOrderGetReissueInfoResponseSuccess>;
  13214 + }
  13215 +
  13216 + /** http method */
  13217 + request.method = method;
  13218 + /** request url */
  13219 + request.url = url;
  13220 + return request;
  13221 +})();
  13222 +
13236 13223 /** @description request parameter type for postServiceOrderImportExcel */
13237 13224 export interface PostServiceOrderImportExcelOption {
13238 13225 /**
... ...