Commit ea6f0208f9a4d939abba3cd893a23f44b1846966

Authored by 曾国涛
1 parent c5ccb53f

feat(invoice): optimize invoice components and enhance user experience

- 重构Client页面表格组件,文件重命名为AllRecordTable.tsx,优化表格项显示
- 修改发票类型显示名称,增加文本复制功能,提升用户交互体验
- 移除部分不必要组件和代码,简化页面结构,提高代码可维护性- 修正InvoiceModal组件中submitter属性,改进页面提交逻辑- 优化InvoiceRecordDetailModal组件,简化订单号显示方式,增加复制功能
- 调整InvoicingModal和ManualInvoicingModal组件,移除冗余的select和list组件
-增加pageSizeOptions配置,提供分页大小选择,改善数据浏览体验
- 修复Invoice组件中开票日期显示格式问题,统一数据展示样式
- 优化Order组件中的按钮权限判断逻辑,提升页面响应性
- 删除不再使用的enumToSelect函数,精简代码依赖
- 修正InvoicingDrawerForm组件中产品名称复制功能的实现
- 优化表单验证逻辑,增强数据校验的准确性和用户体验

通过这些改动,- 实现导出客户信息为Excel文件的功能。
- 使用useMessage钩子来管理Ant Design消息提示。
- 添加单元格操作按钮,包括查看沟通历史、详情和编辑客户信息。
- 组件使用了editable、columnsState和form等高级特性,以提供更好的用户体验和数据管理。

通过这个提交,我们完成了客户记录的表格展示页面,实现了数据的查询、筛选、导出及一些基本操作,提升了项目的业务功能完备性。"增加客户统计信息和调整客户端表格布局"
.umirc.ts
... ... @@ -58,6 +58,20 @@ export default defineConfig({
58 58 icon: 'BookOutlined',
59 59 access: 'canReadAdminAndFinance',
60 60 },
  61 + /*{
  62 + name: '发票管理',
  63 + path: '/Invoice',
  64 + icon: 'BookOutlined',
  65 + access: 'canReadAdminAndFinance',
  66 + routes:[
  67 + {
  68 + name: '权限管理',
  69 + path: 'authrity',
  70 + icon: 'BookOutlined',
  71 + component: './Invoice/InvoiceRecord' },
  72 + ]
  73 + },*/
  74 +
61 75 {
62 76 name: '预存管理',
63 77 path: '/prepaidManage',
... ... @@ -91,7 +105,7 @@ export default defineConfig({
91 105 path: '/client',
92 106 component: './Client',
93 107 icon: 'BookOutlined',
94   - access: 'canReadAdmin',
  108 + access: 'canReadAdminAndSales',
95 109 },
96 110 {
97 111 name: '打印',
... ...
src/pages/Client/Components/ClientStatistic.tsx 0 → 100644
  1 +import { postAdminClientGetStatisticalData } from '@/services';
  2 +import { StatisticCard } from '@ant-design/pro-components';
  3 +import { useEffect, useState } from 'react';
  4 +
  5 +export default () => {
  6 + const [clientStatistic, setClientStatistic] = useState([]);
  7 + useEffect(() => {
  8 + const pullStatistic = async () => {
  9 + let statisticalData = await postAdminClientGetStatisticalData();
  10 + console.log('stati' + JSON.stringify(statisticalData.data));
  11 + setClientStatistic(statisticalData.data);
  12 + };
  13 + pullStatistic();
  14 + }, []);
  15 + return (
  16 + <StatisticCard.Group>
  17 + {clientStatistic.map((stat, index) => (
  18 + <StatisticCard
  19 + key={index}
  20 + statistic={{
  21 + title: stat.title,
  22 + tip: stat.tip || '', // 如果tip不存在,则使用空字符串
  23 + value: stat.value,
  24 + status: stat.status || 'default', // 如果status不存在,则使用'default'
  25 + }}
  26 + />
  27 + ))}
  28 + </StatisticCard.Group>
  29 + );
  30 +};
... ...
src/pages/Client/index.tsx
1 1 import ClientDrawer from '@/pages/Client/Components/ClientDrawer';
2 2 import ClientImportModal from '@/pages/Client/Components/ClientImportModal';
  3 +import ClientStatistic from '@/pages/Client/Components/ClientStatistic';
3 4 import CommunicationHistoryModal from '@/pages/Client/Components/CommunicationHistoryModal';
4 5 import {
5 6 postAdminClientQueryClientPage,
  7 + postServiceConstClientGroupFilters,
6 8 postServiceConstClientLevels,
7 9 postServiceConstTradeStatus,
8 10 } from '@/services';
... ... @@ -10,42 +12,48 @@ import { orderExport } from &#39;@/services/order&#39;;
10 12 import { enumToSelect } from '@/utils';
11 13 import type { ActionType } from '@ant-design/pro-components';
12 14 import { ProTable } from '@ant-design/pro-components';
13   -import { Button, message } from 'antd';
14   -import { useRef } from 'react';
  15 +import { Button, Radio, Space, message } from 'antd';
  16 +import { useEffect, useRef, useState } from 'react';
15 17  
16 18 const columns = [
17 19 {
18 20 dataIndex: 'index',
19 21 valueType: 'indexBorder',
  22 + ellipsis: true,
20 23 width: 48,
21 24 },
22 25 {
23 26 title: '客户名称',
24 27 dataIndex: 'name',
25 28 width: 100,
  29 + ellipsis: true,
26 30 hideInSearch: true,
27 31 },
28 32 {
29 33 title: '单位名称',
30 34 width: 150,
  35 + ellipsis: true,
31 36 dataIndex: 'companyName',
32 37 hideInSearch: true,
33 38 },
34 39 {
35 40 title: '单位地址',
36 41 width: 250,
  42 + ellipsis: true,
37 43 dataIndex: 'companyAddressText',
38 44 hideInSearch: true,
39 45 },
40 46 {
41 47 title: '联系电话',
42 48 width: 150,
  49 + ellipsis: true,
43 50 dataIndex: 'phoneNumber',
44 51 hideInSearch: true,
45 52 },
46 53 {
47 54 title: '客户来源',
48 55 width: 150,
  56 + ellipsis: true,
49 57 dataIndex: 'source',
50 58 hideInSearch: true,
51 59 },
... ... @@ -53,17 +61,20 @@ const columns = [
53 61 title: '推荐人',
54 62 dataIndex: 'referrers',
55 63 width: 150,
  64 + ellipsis: true,
56 65 hideInSearch: true,
57 66 },
58 67 {
59 68 title: '客户需求',
60 69 dataIndex: 'requirements',
61 70 width: 150,
  71 + ellipsis: true,
62 72 hideInSearch: true,
63 73 },
64 74 {
65 75 title: '是否已报方案',
66 76 width: 150,
  77 + ellipsis: true,
67 78 dataIndex: 'hasSchemeText',
68 79 hideInSearch: true,
69 80 },
... ... @@ -71,6 +82,7 @@ const columns = [
71 82 title: '报价时间',
72 83 key: 'since',
73 84 width: 150,
  85 + ellipsis: true,
74 86 dataIndex: 'quoteDatetime',
75 87 valueType: 'dateTime',
76 88 hideInSearch: true,
... ... @@ -78,12 +90,14 @@ const columns = [
78 90 {
79 91 title: '跟进状态',
80 92 width: 150,
  93 + ellipsis: true,
81 94 dataIndex: 'tradeStatusText',
82 95 hideInSearch: true,
83 96 },
84 97 {
85 98 title: '客户等级',
86 99 width: 150,
  100 + ellipsis: true,
87 101 dataIndex: 'levelText',
88 102 hideInSearch: true,
89 103 },
... ... @@ -91,6 +105,7 @@ const columns = [
91 105 title: '创建时间',
92 106 key: 'since',
93 107 width: 150,
  108 + ellipsis: true,
94 109 dataIndex: 'createTime',
95 110 valueType: 'dateTime',
96 111 hideInSearch: true,
... ... @@ -99,6 +114,7 @@ const columns = [
99 114 title: '最新跟进时间',
100 115 key: 'since',
101 116 width: 150,
  117 + ellipsis: true,
102 118 dataIndex: 'latestCommunicationTime',
103 119 valueType: 'dateTime',
104 120 hideInSearch: true,
... ... @@ -207,101 +223,128 @@ const columns = [
207 223  
208 224 export default () => {
209 225 const [messageApi, contextHolder] = message.useMessage();
  226 + const [groupFilter, setGroupFilter] = useState('All');
  227 + const [groupFilterOptions, setGroupFilterDataOptions] = useState([]);
210 228 const actionRef = useRef<ActionType>();
  229 + useEffect(() => {
  230 + const pullGroupFilterDataOptions = async () => {
  231 + const res = await postServiceConstClientGroupFilters();
  232 + console.log('setGroupFilterDataOptions' + JSON.stringify(res.data));
  233 + setGroupFilterDataOptions(enumToSelect(res.data));
  234 + };
  235 + pullGroupFilterDataOptions();
  236 + }, []);
  237 + useEffect(() => {
  238 + actionRef.current?.reload();
  239 + }, [groupFilter]);
211 240 return (
212 241 <>
213   - <ProTable
214   - columns={columns}
215   - actionRef={actionRef}
216   - cardBordered
217   - request={async (params) => {
218   - const res = await postAdminClientQueryClientPage({
219   - data: {
220   - ...params,
  242 + <Space direction="vertical" size="middle" style={{ display: 'flex' }}>
  243 + <ClientStatistic></ClientStatistic>
  244 + <ProTable
  245 + columns={columns}
  246 + actionRef={actionRef}
  247 + cardBordered
  248 + request={async (params) => {
  249 + const res = await postAdminClientQueryClientPage({
  250 + data: {
  251 + ...params,
  252 + groupFilter: groupFilter,
  253 + },
  254 + });
  255 + const data = res.data;
  256 + return data;
  257 + }}
  258 + search={{
  259 + defaultCollapsed: false,
  260 + optionRender: (searchConfig, formProps, dom) => [
  261 + ...dom.reverse(),
  262 + <Button
  263 + key="out"
  264 + onClick={() => {
  265 + const values = searchConfig?.form?.getFieldsValue();
  266 + messageApi.open({
  267 + type: 'loading',
  268 + content: '导出中...',
  269 + duration: 0,
  270 + });
  271 + orderExport(
  272 + '/api/admin/client/exportClients',
  273 + '客户信息.xlsx',
  274 + 'POST',
  275 + values,
  276 + () => {
  277 + messageApi.destroy();
  278 + },
  279 + );
  280 + }}
  281 + >
  282 + 导出
  283 + </Button>,
  284 + ],
  285 + }}
  286 + scroll={{
  287 + x: 1400,
  288 + }}
  289 + editable={{
  290 + type: 'multiple',
  291 + }}
  292 + columnsState={{
  293 + persistenceKey: 'pro-table-singe-demos',
  294 + persistenceType: 'localStorage',
  295 + defaultValue: {
  296 + option: { fixed: 'right', disable: true },
  297 + },
  298 + onChange(value) {
  299 + console.log('value: ', value);
221 300 },
222   - });
223   - const data = res.data;
224   - return data;
225   - }}
226   - search={{
227   - defaultCollapsed: false,
228   - optionRender: (searchConfig, formProps, dom) => [
229   - ...dom.reverse(),
230   - <Button
231   - key="out"
232   - onClick={() => {
233   - const values = searchConfig?.form?.getFieldsValue();
234   - messageApi.open({
235   - type: 'loading',
236   - content: '导出中...',
237   - duration: 0,
238   - });
239   - orderExport(
240   - '/api/admin/client/exportClients',
241   - '客户信息.xlsx',
242   - 'POST',
243   - values,
244   - () => {
245   - messageApi.destroy();
246   - },
247   - );
  301 + }}
  302 + rowKey="id"
  303 + options={{
  304 + setting: {
  305 + listsHeight: 400,
  306 + },
  307 + }}
  308 + form={{
  309 + // 由于配置了 transform,提交的参与与定义的不同这里需要转化一下
  310 + syncToUrl: (values, type) => {
  311 + if (type === 'get') {
  312 + return {
  313 + ...values,
  314 + created_at: [values.startTime, values.endTime],
  315 + };
  316 + }
  317 + return values;
  318 + },
  319 + }}
  320 + pagination={{
  321 + pageSize: 5,
  322 + onChange: (page) => console.log(page),
  323 + }}
  324 + dateFormatter="string"
  325 + headerTitle="高级表格"
  326 + toolBarRender={() => [
  327 + <div key={'groupFilter'}>
  328 + <Radio.Group
  329 + options={groupFilterOptions}
  330 + onChange={(e) => {
  331 + setGroupFilter(e.target.value);
  332 + }}
  333 + value={groupFilter}
  334 + optionType="button"
  335 + />
  336 + </div>,
  337 + <ClientDrawer
  338 + optType={'add'}
  339 + key="button"
  340 + onFinish={() => {
  341 + actionRef.current.reload();
248 342 }}
249   - >
250   - 导出
251   - </Button>,
252   - ],
253   - }}
254   - scroll={{
255   - x: 1400,
256   - }}
257   - editable={{
258   - type: 'multiple',
259   - }}
260   - columnsState={{
261   - persistenceKey: 'pro-table-singe-demos',
262   - persistenceType: 'localStorage',
263   - defaultValue: {
264   - option: { fixed: 'right', disable: true },
265   - },
266   - onChange(value) {
267   - console.log('value: ', value);
268   - },
269   - }}
270   - rowKey="id"
271   - options={{
272   - setting: {
273   - listsHeight: 400,
274   - },
275   - }}
276   - form={{
277   - // 由于配置了 transform,提交的参与与定义的不同这里需要转化一下
278   - syncToUrl: (values, type) => {
279   - if (type === 'get') {
280   - return {
281   - ...values,
282   - created_at: [values.startTime, values.endTime],
283   - };
284   - }
285   - return values;
286   - },
287   - }}
288   - pagination={{
289   - pageSize: 5,
290   - onChange: (page) => console.log(page),
291   - }}
292   - dateFormatter="string"
293   - headerTitle="高级表格"
294   - toolBarRender={() => [
295   - <ClientDrawer
296   - optType={'add'}
297   - key="button"
298   - onFinish={() => {
299   - actionRef.current.reload();
300   - }}
301   - ></ClientDrawer>,
302   - <ClientImportModal key="import" />,
303   - ]}
304   - />
  343 + ></ClientDrawer>,
  344 + <ClientImportModal key="import" />,
  345 + ]}
  346 + />
  347 + </Space>
305 348 {contextHolder}
306 349 </>
307 350 );
... ...
src/pages/Invoice/InvoiceRecord/index.less 0 → 100644
  1 +.invoice-index td {
  2 + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial,
  3 + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC',
  4 + 'WenQuanYi Micro Hei', sans-serif;
  5 + font-size: 14px;
  6 +}
  7 +
  8 +.invoice-detail td {
  9 + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial,
  10 + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC',
  11 + 'WenQuanYi Micro Hei', sans-serif;
  12 + font-size: 14px;
  13 +}
  14 +
  15 +.bank-statement-choose td {
  16 + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial,
  17 + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC',
  18 + 'WenQuanYi Micro Hei', sans-serif;
  19 + font-size: 14px;
  20 +}
... ...
src/pages/Invoice/InvoiceRecord/index.tsx 0 → 100644
  1 +import ButtonConfirm from '@/components/ButtomConfirm';
  2 +import EllipsisDiv from '@/components/Div/EllipsisDiv';
  3 +import { RESPONSE_CODE } from '@/constants/enum';
  4 +import AddInvoiceDrawerForm from '@/pages/Invoice/components/AddInvoiceDrawerForm';
  5 +import BankImportModal from '@/pages/Invoice/components/BankImportModal';
  6 +import InvoiceModal from '@/pages/Invoice/components/InvoiceModal';
  7 +import InvoiceRecordDetailModal from '@/pages/Invoice/components/InvoiceRecordDetailModal';
  8 +import InvoiceVerificationModal from '@/pages/Invoice/components/InvoiceVerificationModal';
  9 +import InvoicingModal from '@/pages/Invoice/components/InvoicingModal';
  10 +import ManualInvoicingModal from '@/pages/Invoice/components/ManualInvoicingModal';
  11 +import {
  12 + BANK_STATEMENT_COLUMNS,
  13 + INVOICE_COLUMNS,
  14 + INVOICE_STATUS,
  15 +} from '@/pages/Invoice/constant';
  16 +import { INVOCING_STATUS, PAYEE_OPTIONS } from '@/pages/Order/constant';
  17 +import {
  18 + postServiceBankStatementDeleteBankStatement,
  19 + postServiceBankStatementEditBankStatement,
  20 + postServiceBankStatementQueryBankStatement,
  21 + postServiceConstAfterInvoicingInvoiceRecordStatus,
  22 + postServiceConstBeforeInvoicingInvoiceRecordStatus,
  23 + postServiceConstInvoiceType,
  24 + postServiceConstInvoicingType,
  25 + postServiceInvoiceDeleteInvoice,
  26 + postServiceInvoiceInvoicing,
  27 + postServiceInvoiceQueryInvoice,
  28 + postServiceInvoiceQueryInvoiceRecordList,
  29 + postServiceOrderQuerySalesCode,
  30 +} from '@/services';
  31 +import { excelExport } from '@/services/exportRequest';
  32 +import {
  33 + enumToProTableEnumValue,
  34 + enumToSelect,
  35 + enumValueToLabel,
  36 + formatDateTime,
  37 +} from '@/utils';
  38 +import { formatDate } from '@/utils/time';
  39 +import { PlusOutlined } from '@ant-design/icons';
  40 +import { ActionType, ModalForm, ProTable } from '@ant-design/pro-components';
  41 +import { Button, Space, Table, Tabs, message } from 'antd';
  42 +import { useEffect, useRef, useState } from 'react';
  43 +
  44 +const InvoiceRecord = () => {
  45 + const invoiceActionRef = useRef<ActionType>();
  46 + const bankActionRef = useRef<ActionType>();
  47 + const waitDealrecordActionRef = useRef<ActionType>();
  48 + const processedRecordRef = useRef<ActionType>();
  49 + const [invoiceTypeValueEnum, setInvoiceTypeValueEnum] = useState({});
  50 + const [invoicingTypeValueEnum, setInvoicingTypeValueEnum] = useState({});
  51 + const [salesCodeValueEnum, setSalesCodeValueEnum] = useState({});
  52 + const [bankImportModalVisible, setBankImportModalVisible] = useState(false);
  53 + const [invoiceVerificationVisible, setInvoiceVerificationVisible] =
  54 + useState(false);
  55 + const [invoiceId, setInvoiceId] = useState(undefined);
  56 + const [invoiceRecordDetailVisible, setInvoiceRecordDetailVisible] =
  57 + useState(false);
  58 + const [invoiceRecord, setInvoiceRecord] = useState({});
  59 + const [messageApi, contextHolder] = message.useMessage();
  60 +
  61 + useEffect(() => {
  62 + async function extracted() {
  63 + let invoiceTypeRet = await postServiceConstInvoiceType();
  64 + setInvoiceTypeValueEnum(invoiceTypeRet.data);
  65 + }
  66 +
  67 + extracted().catch(console.error);
  68 + }, []);
  69 +
  70 + useEffect(() => {
  71 + async function extracted() {
  72 + let invoicingTypeRet = await postServiceConstInvoicingType();
  73 + setInvoicingTypeValueEnum(invoicingTypeRet.data);
  74 + }
  75 +
  76 + extracted().catch(console.error);
  77 + }, []);
  78 +
  79 + useEffect(() => {
  80 + async function extracted() {
  81 + const res = await postServiceOrderQuerySalesCode();
  82 + let map = {};
  83 + res.data?.forEach((item) => {
  84 + map[item.userName] = {
  85 + text: item.userName,
  86 + status: item.userName,
  87 + };
  88 + });
  89 + setSalesCodeValueEnum(map);
  90 + }
  91 +
  92 + extracted().catch(console.error);
  93 + }, []);
  94 +
  95 + const reloadInvoiceTable = () => {
  96 + invoiceActionRef.current?.reload();
  97 + };
  98 +
  99 + const reloadBankStatementTable = () => {
  100 + bankActionRef.current?.reload();
  101 + };
  102 + const reloadRecordTable = () => {
  103 + waitDealrecordActionRef.current?.reload();
  104 + processedRecordRef.current?.reload();
  105 + };
  106 +
  107 + const getTableCellText = (target: any) => {
  108 + if (!target) {
  109 + return '';
  110 + }
  111 +
  112 + if (target.props) {
  113 + return target.props.text;
  114 + }
  115 +
  116 + return target;
  117 + };
  118 +
  119 + const waitDealRecordColumns = [
  120 + {
  121 + dataIndex: 'index',
  122 + valueType: 'indexBorder',
  123 + hideInSearch: true,
  124 + ellipsis: true,
  125 + width: 48,
  126 + },
  127 + {
  128 + title: '开票编号',
  129 + valueType: 'text',
  130 + dataIndex: 'id',
  131 + copyable: true,
  132 + hideInSearch: true,
  133 + ellipsis: true,
  134 + width: 100,
  135 + },
  136 + {
  137 + title: '发票状态',
  138 + valueType: 'Text',
  139 + dataIndex: 'statusText',
  140 + ellipsis: true,
  141 + hideInSearch: true,
  142 + },
  143 + {
  144 + title: '申请开票时间',
  145 + dataIndex: 'createTime',
  146 + valueType: 'dateTime',
  147 + hideInSearch: true,
  148 + ellipsis: true,
  149 + },
  150 + {
  151 + title: '销售代表',
  152 + valueType: 'text',
  153 + hideInSearch: true,
  154 + ellipsis: true,
  155 + dataIndex: 'createByName',
  156 + },
  157 + {
  158 + title: '购方名称',
  159 + valueType: 'text',
  160 + dataIndex: 'partyAName',
  161 + hideInSearch: true,
  162 + ellipsis: true,
  163 + },
  164 + {
  165 + title: '购方税号',
  166 + valueType: 'text',
  167 + hideInSearch: true,
  168 + dataIndex: 'partyATaxid',
  169 + ellipsis: true,
  170 + },
  171 + {
  172 + title: '收款单位',
  173 + valueType: 'text',
  174 + hideInSearch: true,
  175 + dataIndex: 'partyBName',
  176 + ellipsis: true,
  177 + },
  178 + {
  179 + title: '开票金额',
  180 + valueType: 'money',
  181 + dataIndex: 'price',
  182 + hideInSearch: true,
  183 + ellipsis: true,
  184 + },
  185 + {
  186 + title: '开具类型',
  187 + valueType: 'Text',
  188 + dataIndex: 'invoicingTypeText',
  189 + hideInSearch: true,
  190 + ellipsis: true,
  191 + },
  192 + {
  193 + title: '发票类型',
  194 + valueType: 'Text',
  195 + dataIndex: 'typeText',
  196 + hideInSearch: true,
  197 + ellipsis: true,
  198 + },
  199 + {
  200 + title: '是否加急',
  201 + valueType: 'Text',
  202 + dataIndex: 'isUrgentText',
  203 + hideInSearch: true,
  204 + ellipsis: true,
  205 + },
  206 + {
  207 + title: '申请备注',
  208 + valueType: 'text',
  209 + dataIndex: 'applyInvoicingNotes',
  210 + hideInSearch: true,
  211 + ellipsis: true,
  212 + },
  213 + {
  214 + title: '购方名称',
  215 + valueType: 'Text',
  216 + dataIndex: 'partyANameLike',
  217 + hideInTable: true,
  218 + },
  219 + {
  220 + title: '收款单位',
  221 + valueType: 'select',
  222 + dataIndex: 'partyB',
  223 + filters: true,
  224 + onFilter: true,
  225 + hideInTable: true,
  226 + valueEnum: enumToProTableEnumValue(PAYEE_OPTIONS),
  227 + },
  228 + {
  229 + title: '主订单号',
  230 + valueType: 'Text',
  231 + dataIndex: 'mainOrderId',
  232 + hideInTable: true,
  233 + },
  234 + {
  235 + title: '子订单号',
  236 + valueType: 'Text',
  237 + dataIndex: 'subOrderId',
  238 + hideInTable: true,
  239 + },
  240 + {
  241 + title: '销售代表',
  242 + valueType: 'select',
  243 + dataIndex: 'salesCode',
  244 + filters: true,
  245 + onFilter: true,
  246 + hideInTable: true,
  247 + valueEnum: salesCodeValueEnum,
  248 + },
  249 + {
  250 + title: '发票类型',
  251 + valueType: 'select',
  252 + dataIndex: 'type',
  253 + filters: true,
  254 + onFilter: true,
  255 + hideInTable: true,
  256 + valueEnum: enumToProTableEnumValue(invoiceTypeValueEnum),
  257 + },
  258 + {
  259 + title: '开具类型',
  260 + valueType: 'select',
  261 + dataIndex: 'invoicingType',
  262 + filters: true,
  263 + onFilter: true,
  264 + hideInTable: true,
  265 + valueEnum: enumToProTableEnumValue(invoicingTypeValueEnum),
  266 + },
  267 + {
  268 + title: '开票状态',
  269 + valueType: 'select',
  270 + dataIndex: 'status',
  271 + filters: true,
  272 + onFilter: true,
  273 + hideInTable: true,
  274 + request: async () => {
  275 + const res = await postServiceConstBeforeInvoicingInvoiceRecordStatus();
  276 + return enumToSelect(res.data);
  277 + },
  278 + },
  279 + {
  280 + title: '是否加急',
  281 + valueType: 'select',
  282 + dataIndex: 'isUrgent',
  283 + filters: true,
  284 + onFilter: true,
  285 + hideInTable: true,
  286 + valueEnum: {
  287 + true: {
  288 + text: '是',
  289 + status: true,
  290 + },
  291 + false: {
  292 + text: '否',
  293 + status: false,
  294 + },
  295 + },
  296 + },
  297 + {
  298 + title: '申请开票时间',
  299 + dataIndex: 'createTime',
  300 + valueType: 'dateTimeRange',
  301 + width: 200,
  302 + hideInTable: true,
  303 + search: {
  304 + transform: (value) => {
  305 + if (value) {
  306 + return {
  307 + createTimeGe: value[0],
  308 + createTimeLe: value[1],
  309 + };
  310 + }
  311 + },
  312 + },
  313 + },
  314 + {
  315 + title: '操作',
  316 + valueType: 'option',
  317 + key: 'option',
  318 + render: (text, record) => {
  319 + return [
  320 + /*<InvoiceRecordDetailModal
  321 + key="detail"
  322 + id={record.id}
  323 + subOrderIds={record.subOrderIds}
  324 + onClose={()=>{
  325 + waitDealrecordActionRef.current?.reload();
  326 + }
  327 + }
  328 + />*/
  329 + <>
  330 + {record.paths.includes('DETAIL') && (
  331 + <a
  332 + key="detail"
  333 + onClick={() => {
  334 + setInvoiceRecordDetailVisible(true);
  335 + setInvoiceRecord(record);
  336 + }}
  337 + >
  338 + 详情
  339 + </a>
  340 + )}
  341 + </>,
  342 + <>
  343 + {record.paths.includes('PREVIEW') && (
  344 + <InvoiceModal key="invoiceModal" recordId={record.id} />
  345 + )}
  346 + </>,
  347 + <>
  348 + {record.paths.includes('INVOICING') && (
  349 + <ManualInvoicingModal
  350 + key={'ManualInvoicingModal'}
  351 + record={record}
  352 + ></ManualInvoicingModal>
  353 + )}
  354 + </>,
  355 + ];
  356 + },
  357 + },
  358 + ];
  359 +
  360 + const processedRecordColumns = [
  361 + {
  362 + dataIndex: 'index',
  363 + valueType: 'indexBorder',
  364 + },
  365 + {
  366 + title: '开票编号',
  367 + valueType: 'text',
  368 + dataIndex: 'id',
  369 + copyable: true,
  370 + ellipsis: true,
  371 + },
  372 + {
  373 + title: '发票号码',
  374 + valueType: 'text',
  375 + dataIndex: 'invoiceNumber',
  376 + copyable: true,
  377 + ellipsis: true,
  378 + },
  379 + {
  380 + title: '开票日期',
  381 + dataIndex: 'invoicingDate',
  382 + valueType: 'date',
  383 + hideInSearch: true,
  384 + ellipsis: true,
  385 + },
  386 + {
  387 + title: '发票类型',
  388 + valueType: 'Text',
  389 + dataIndex: 'typeText',
  390 + hideInSearch: true,
  391 + ellipsis: true,
  392 + },
  393 + {
  394 + title: '发票状态',
  395 + valueType: 'Text',
  396 + dataIndex: 'statusText',
  397 + hideInSearch: true,
  398 + ellipsis: true,
  399 + },
  400 + {
  401 + title: '购方名称',
  402 + valueType: 'text',
  403 + dataIndex: 'partyAName',
  404 + hideInSearch: true,
  405 + ellipsis: true,
  406 + },
  407 + {
  408 + title: '购方税号',
  409 + valueType: 'text',
  410 + dataIndex: 'partyATaxid',
  411 + ellipsis: true,
  412 + },
  413 + {
  414 + title: '收款单位',
  415 + valueType: 'text',
  416 + dataIndex: 'partyBName',
  417 + hideInSearch: true,
  418 + ellipsis: true,
  419 + },
  420 + {
  421 + title: '联系人',
  422 + valueType: 'text',
  423 + dataIndex: 'contacts',
  424 + hideInSearch: true,
  425 + ellipsis: true,
  426 + },
  427 + {
  428 + title: '申请人',
  429 + valueType: 'text',
  430 + dataIndex: 'createByName',
  431 + hideInSearch: true,
  432 + ellipsis: true,
  433 + },
  434 + {
  435 + title: '开票金额(元)',
  436 + valueType: 'money',
  437 + dataIndex: 'price',
  438 + hideInSearch: true,
  439 + ellipsis: true,
  440 + },
  441 + {
  442 + title: '备注',
  443 + valueType: 'text',
  444 + dataIndex: 'contacts',
  445 + hideInSearch: true,
  446 + ellipsis: true,
  447 + },
  448 + {
  449 + title: '失败原因',
  450 + valueType: 'text',
  451 + dataIndex: 'failureReason',
  452 + hideInSearch: true,
  453 + ellipsis: true,
  454 + },
  455 +
  456 + {
  457 + title: '购方名称',
  458 + valueType: 'text',
  459 + dataIndex: 'partyANameLike',
  460 + hideInTable: true,
  461 + },
  462 + {
  463 + title: '发票类型',
  464 + valueType: 'select',
  465 + dataIndex: 'type',
  466 + filters: true,
  467 + onFilter: true,
  468 + hideInTable: true,
  469 + valueEnum: enumToProTableEnumValue(invoiceTypeValueEnum),
  470 + },
  471 +
  472 + {
  473 + title: '开票状态',
  474 + valueType: 'select',
  475 + dataIndex: 'status',
  476 + filters: true,
  477 + onFilter: true,
  478 + hideInTable: true,
  479 + request: async () => {
  480 + const res = await postServiceConstAfterInvoicingInvoiceRecordStatus();
  481 + return enumToSelect(res.data);
  482 + },
  483 + },
  484 + {
  485 + title: '销售代表',
  486 + valueType: 'select',
  487 + dataIndex: 'salesCode',
  488 + filters: true,
  489 + onFilter: true,
  490 + hideInTable: true,
  491 + valueEnum: salesCodeValueEnum,
  492 + },
  493 + {
  494 + title: '联系人',
  495 + valueType: 'text',
  496 + dataIndex: 'contactsLike',
  497 + hideInTable: true,
  498 + },
  499 + {
  500 + title: '开票日期',
  501 + dataIndex: 'invoicingDate',
  502 + valueType: 'dateRange',
  503 + hideInTable: true,
  504 + search: {
  505 + transform: (value) => {
  506 + if (value) {
  507 + return {
  508 + invoicingDateGe: value[0],
  509 + invoicingDateLe: value[1],
  510 + };
  511 + }
  512 + },
  513 + },
  514 + },
  515 + {
  516 + title: '收款单位',
  517 + valueType: 'select',
  518 + dataIndex: 'partyB',
  519 + filters: true,
  520 + onFilter: true,
  521 + hideInTable: true,
  522 + valueEnum: enumToProTableEnumValue(PAYEE_OPTIONS),
  523 + },
  524 + {
  525 + title: '操作',
  526 + valueType: 'option',
  527 + key: 'option',
  528 + render: (text, record) => [
  529 + <>
  530 + {record.status === 'SUCCESS' && record.paths.includes('DETAIL') && (
  531 + <a
  532 + key="detail"
  533 + onClick={() => {
  534 + setInvoiceRecordDetailVisible(true);
  535 + setInvoiceRecord(record);
  536 + }}
  537 + >
  538 + 详情
  539 + </a>
  540 + )}
  541 + </>,
  542 + <>
  543 + {record.status === 'SUCCESS' &&
  544 + record.paths.includes('DOWNLOAD_INVOICE') && (
  545 + <a href={record.invoiceAddress} download>
  546 + 下载发票
  547 + </a>
  548 + )}
  549 + </>,
  550 + <>
  551 + {record.status === 'FAIL' && record.paths.includes('RETRY') && (
  552 + <ModalForm
  553 + title="提示"
  554 + trigger={
  555 + <Button type="link" danger>
  556 + 重试
  557 + </Button>
  558 + }
  559 + autoFocusFirstInput
  560 + modalProps={{
  561 + destroyOnClose: true,
  562 + }}
  563 + submitTimeout={2000}
  564 + onFinish={async () => {
  565 + const res = await postServiceInvoiceInvoicing({
  566 + data: {
  567 + invoiceRecordIds: [record.id],
  568 + },
  569 + });
  570 + if (res) {
  571 + message.success(res.message);
  572 + processedRecordRef?.current?.reload();
  573 + }
  574 + return true;
  575 + }}
  576 + >
  577 + 确定重试订单信息吗?
  578 + </ModalForm>
  579 + )}
  580 + </>,
  581 + <>
  582 + {record.paths.includes('INVOICING') && (
  583 + <ManualInvoicingModal
  584 + key={'ManualInvoicingModal'}
  585 + record={record}
  586 + ></ManualInvoicingModal>
  587 + )}
  588 + </>,
  589 + ],
  590 + },
  591 + ];
  592 + /**
  593 + * 加载发票列表表格的各个列格式
  594 + */
  595 + const invoicecColumnsInit = () => {
  596 + let columns = INVOICE_COLUMNS.map((item) => {
  597 + let newItem = { ...item };
  598 + let dataIndex = item.dataIndex;
  599 + let dataType = item.valueType;
  600 +
  601 + newItem.render = (text, record) => {
  602 + let textValue = record[dataIndex];
  603 +
  604 + if (dataType === 'dateRange' || dataType === 'date') {
  605 + textValue = formatDate(textValue);
  606 + }
  607 +
  608 + if (dataType === 'dateTime') {
  609 + textValue = formatDateTime(textValue);
  610 + }
  611 +
  612 + if (dataType === 'money') {
  613 + textValue = '¥' + textValue;
  614 + }
  615 +
  616 + switch (dataIndex) {
  617 + case 'invoiceStatus':
  618 + return (
  619 + <EllipsisDiv
  620 + text={enumValueToLabel(
  621 + getTableCellText(textValue),
  622 + INVOCING_STATUS,
  623 + )}
  624 + />
  625 + );
  626 +
  627 + case 'status':
  628 + return (
  629 + <EllipsisDiv
  630 + text={enumValueToLabel(
  631 + getTableCellText(textValue),
  632 + INVOICE_STATUS,
  633 + )}
  634 + />
  635 + );
  636 +
  637 + case 'payee':
  638 + return (
  639 + <EllipsisDiv
  640 + text={enumValueToLabel(
  641 + getTableCellText(textValue),
  642 + PAYEE_OPTIONS,
  643 + )}
  644 + />
  645 + );
  646 +
  647 + default:
  648 + return <EllipsisDiv text={getTableCellText(textValue)} />;
  649 + }
  650 + };
  651 +
  652 + return newItem;
  653 + });
  654 +
  655 + columns.push({
  656 + title: '操作',
  657 + valueType: 'option',
  658 + key: 'option',
  659 + fixed: 'right',
  660 + width: 120,
  661 + render: (text, record) => {
  662 + let btns = [];
  663 + if (record.path?.includes('writeOff')) {
  664 + btns.push(
  665 + <a
  666 + key="editable"
  667 + onClick={() => {
  668 + setInvoiceVerificationVisible(true);
  669 + setInvoiceId(record.invoiceId);
  670 + }}
  671 + >
  672 + 核销
  673 + </a>,
  674 + );
  675 + }
  676 +
  677 + if (record.path?.includes('queryInvoiceDetails')) {
  678 + btns.push(
  679 + <Button
  680 + className="p-0"
  681 + key="view"
  682 + type="link"
  683 + onClick={() => {
  684 + setInvoiceVerificationVisible(true);
  685 + setInvoiceId(record.invoiceId);
  686 + }}
  687 + >
  688 + 查看
  689 + </Button>,
  690 + );
  691 + }
  692 +
  693 + if (record.path?.includes('deleteInvoice')) {
  694 + btns.push(
  695 + <ButtonConfirm
  696 + key="delete"
  697 + className="p-0"
  698 + title={
  699 + '确认删除发票号码为[ ' + record.invoiceNumber + ' ]的发票吗?'
  700 + }
  701 + text="删除"
  702 + onConfirm={async () => {
  703 + let res = await postServiceInvoiceDeleteInvoice({
  704 + data: { invoiceId: record.invoiceId },
  705 + });
  706 + if (res) {
  707 + message.success(res.message);
  708 + reloadInvoiceTable();
  709 + }
  710 + }}
  711 + />,
  712 + );
  713 + }
  714 + return btns;
  715 + },
  716 + });
  717 +
  718 + return columns;
  719 + };
  720 +
  721 + const bankStatemetColumnsInit = () => {
  722 + let columns = BANK_STATEMENT_COLUMNS.map((item) => {
  723 + let newItem = { ...item };
  724 + let dataIndex = item.dataIndex;
  725 + let dataType = item.valueType;
  726 +
  727 + newItem.render = (text, record) => {
  728 + let textValue = record[dataIndex];
  729 +
  730 + if (dataType === 'date') {
  731 + textValue = formatDate(textValue);
  732 + }
  733 +
  734 + if (dataType === 'dateTime') {
  735 + textValue = formatDateTime(textValue);
  736 + }
  737 +
  738 + if (dataType === 'money') {
  739 + if (textValue === null || textValue === undefined) {
  740 + textValue = '';
  741 + } else {
  742 + textValue = '¥' + textValue;
  743 + }
  744 + }
  745 +
  746 + switch (dataIndex) {
  747 + case 'invoiceStatus':
  748 + return (
  749 + <EllipsisDiv
  750 + text={enumValueToLabel(
  751 + getTableCellText(textValue),
  752 + INVOCING_STATUS,
  753 + )}
  754 + />
  755 + );
  756 +
  757 + case 'status':
  758 + return (
  759 + <EllipsisDiv
  760 + text={enumValueToLabel(
  761 + getTableCellText(textValue),
  762 + INVOICE_STATUS,
  763 + )}
  764 + />
  765 + );
  766 +
  767 + case 'payee':
  768 + return (
  769 + <EllipsisDiv
  770 + text={enumValueToLabel(
  771 + getTableCellText(textValue),
  772 + PAYEE_OPTIONS,
  773 + )}
  774 + />
  775 + );
  776 +
  777 + default:
  778 + return <EllipsisDiv text={getTableCellText(textValue)} />;
  779 + }
  780 + };
  781 +
  782 + return newItem;
  783 + });
  784 +
  785 + columns.push({
  786 + title: '操作',
  787 + valueType: 'option',
  788 + key: 'option',
  789 + fixed: 'right',
  790 + width: 120,
  791 + render: (text, record, _, action) => {
  792 + let btns = [];
  793 + if (record.path?.includes('editBankStatement')) {
  794 + btns.push(
  795 + <a
  796 + key="editable"
  797 + onClick={() => {
  798 + action?.startEditable?.(record.id);
  799 + }}
  800 + >
  801 + 编辑
  802 + </a>,
  803 + );
  804 + }
  805 +
  806 + if (record.path?.includes('deleteBankStatement')) {
  807 + btns.push(
  808 + <ButtonConfirm
  809 + key="delete"
  810 + className="p-0"
  811 + title={'是否删除该银行流水记录?'}
  812 + text="删除"
  813 + onConfirm={async () => {
  814 + let res = await postServiceBankStatementDeleteBankStatement({
  815 + data: { id: record.id },
  816 + });
  817 + if (res.result === RESPONSE_CODE.SUCCESS) {
  818 + message.success(res.message);
  819 + reloadBankStatementTable();
  820 + }
  821 + }}
  822 + />,
  823 + );
  824 + }
  825 + return btns;
  826 + },
  827 + });
  828 +
  829 + return columns;
  830 + };
  831 +
  832 + const tabsItems = [
  833 + {
  834 + key: 1,
  835 + label: '待处理',
  836 + children: (
  837 + <ProTable
  838 + columns={waitDealRecordColumns}
  839 + actionRef={waitDealrecordActionRef}
  840 + cardBordered
  841 + pagination={{
  842 + showSizeChanger: true, // 显示可以选择每页显示条数的下拉菜单
  843 + pageSizeOptions: ['10', '20', '50', '100'], // 设置可以选择的每页显示条数选项
  844 + }}
  845 + rowSelection={{
  846 + selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],
  847 + alwaysShowAlert: true,
  848 + }}
  849 + tableAlertOptionRender={({ selectedRowKeys, selectedRows }) => {
  850 + console.log(selectedRows);
  851 + console.log(selectedRowKeys);
  852 + return (
  853 + <Space size={16}>
  854 + <InvoicingModal
  855 + reloadRecordTable={reloadRecordTable}
  856 + key="button"
  857 + selectedRowKeys={selectedRowKeys}
  858 + />
  859 + </Space>
  860 + );
  861 + }}
  862 + request={async (params) => {
  863 + let res = await postServiceInvoiceQueryInvoiceRecordList({
  864 + data: {
  865 + ...params,
  866 + statusIn: [
  867 + 'WAITING_FOR_INVOICING',
  868 + 'AUDITING',
  869 + 'AUDITING_NOT_PASSED',
  870 + 'CANCELED',
  871 + ],
  872 + needBuildDetails: true,
  873 + needBuildSubOrders: true,
  874 + },
  875 + });
  876 + return {
  877 + data: res?.data?.data,
  878 + total: res?.data?.total || 0,
  879 + };
  880 + }}
  881 + columnsState={{
  882 + persistenceKey: 'pro-table-singe-demos',
  883 + persistenceType: 'localStorage',
  884 + defaultValue: {
  885 + option: { fixed: 'right', disable: true },
  886 + },
  887 + onChange(value) {
  888 + console.log('value: ', value);
  889 + },
  890 + }}
  891 + rowKey="id"
  892 + search={{
  893 + labelWidth: 'auto',
  894 + }}
  895 + options={{
  896 + setting: {
  897 + listsHeight: 400,
  898 + },
  899 + }}
  900 + form={{}}
  901 + dateFormatter="string"
  902 + headerTitle="待开票列表"
  903 + scroll={{ x: 1400, y: 360 }}
  904 + />
  905 + ),
  906 + },
  907 + {
  908 + key: 2,
  909 + label: '开票记录',
  910 + children: (
  911 + <ProTable
  912 + columns={processedRecordColumns}
  913 + actionRef={processedRecordRef}
  914 + cardBordered
  915 + pagination={{
  916 + showSizeChanger: true, // 显示可以选择每页显示条数的下拉菜单
  917 + pageSizeOptions: ['10', '20', '50', '100'], // 设置可以选择的每页显示条数选项
  918 + }}
  919 + editable={{
  920 + type: 'multiple',
  921 + onSave: async (rowKey, data) => {
  922 + await postServiceBankStatementEditBankStatement({ data: data });
  923 + },
  924 + actionRender: (row, config, defaultDom) => [
  925 + defaultDom.save,
  926 + defaultDom.cancel,
  927 + ],
  928 + }}
  929 + search={{
  930 + labelWidth: 'auto',
  931 + defaultCollapsed: false,
  932 + optionRender: (searchConfig, formProps, dom) => [
  933 + ...dom,
  934 + <Button
  935 + key="out"
  936 + onClick={() => {
  937 + const values = searchConfig?.form?.getFieldsValue();
  938 + console.log(values);
  939 + messageApi.open({
  940 + type: 'loading',
  941 + content: '正在导出文件...',
  942 + });
  943 + excelExport(
  944 + '/api/service/invoice/exportInvoiceRecords',
  945 + {
  946 + ...values,
  947 + statusIn: ['INVOICING', 'SUCCESS', 'FAIL'],
  948 + },
  949 + () => {
  950 + messageApi.destroy();
  951 + },
  952 + );
  953 + }}
  954 + >
  955 + 导出
  956 + </Button>,
  957 + ],
  958 + }}
  959 + request={async (params) => {
  960 + let res = await postServiceInvoiceQueryInvoiceRecordList({
  961 + data: {
  962 + ...params,
  963 + statusIn: ['INVOICING', 'SUCCESS', 'FAIL'],
  964 + },
  965 + });
  966 + return {
  967 + data: res?.data?.data,
  968 + total: res?.data?.total || 0,
  969 + };
  970 + }}
  971 + columnsState={{
  972 + persistenceKey: 'pro-table-singe-demos',
  973 + persistenceType: 'localStorage',
  974 + defaultValue: {
  975 + option: { fixed: 'right', disable: true },
  976 + },
  977 + onChange(value) {
  978 + console.log('value: ', value);
  979 + },
  980 + }}
  981 + rowKey="id"
  982 + options={{
  983 + setting: {
  984 + listsHeight: 400,
  985 + },
  986 + }}
  987 + form={{}}
  988 + dateFormatter="string"
  989 + headerTitle="待开票列表"
  990 + scroll={{ x: 1400, y: 360 }}
  991 + toolBarRender={() => []}
  992 + />
  993 + ),
  994 + },
  995 + {
  996 + key: 3,
  997 + label: '发票管理',
  998 + children: (
  999 + <ProTable
  1000 + columns={invoicecColumnsInit()}
  1001 + actionRef={invoiceActionRef}
  1002 + cardBordered
  1003 + pagination={{
  1004 + pageSize: 10,
  1005 + }}
  1006 + request={async (params) => {
  1007 + const res = await postServiceInvoiceQueryInvoice({
  1008 + data: { ...params },
  1009 + });
  1010 + if (res) {
  1011 + return {
  1012 + data: res?.data?.data || [],
  1013 + total: res?.data?.total || 0,
  1014 + };
  1015 + }
  1016 + }}
  1017 + columnsState={{
  1018 + persistenceKey: 'pro-table-singe-demos',
  1019 + persistenceType: 'localStorage',
  1020 + defaultValue: {
  1021 + option: { fixed: 'right', disable: true },
  1022 + },
  1023 + onChange(value) {
  1024 + console.log('value: ', value);
  1025 + },
  1026 + }}
  1027 + rowKey="id"
  1028 + search={{
  1029 + labelWidth: 'auto',
  1030 + }}
  1031 + options={{
  1032 + setting: {
  1033 + listsHeight: 400,
  1034 + },
  1035 + }}
  1036 + form={{}}
  1037 + dateFormatter="string"
  1038 + headerTitle="发票列表"
  1039 + scroll={{ x: 1400, y: 360 }}
  1040 + toolBarRender={() => [
  1041 + <AddInvoiceDrawerForm
  1042 + onClose={() => {
  1043 + invoiceActionRef.current?.reload();
  1044 + bankActionRef.current?.reload();
  1045 + }}
  1046 + key="add"
  1047 + ></AddInvoiceDrawerForm>,
  1048 + ]}
  1049 + />
  1050 + ),
  1051 + },
  1052 + {
  1053 + key: 4,
  1054 + label: '银行流水',
  1055 + children: (
  1056 + <ProTable
  1057 + columns={bankStatemetColumnsInit()}
  1058 + actionRef={bankActionRef}
  1059 + cardBordered
  1060 + pagination={{
  1061 + pageSize: 10,
  1062 + }}
  1063 + editable={{
  1064 + type: 'multiple',
  1065 + onSave: async (rowKey, data) => {
  1066 + await postServiceBankStatementEditBankStatement({ data: data });
  1067 + },
  1068 + actionRender: (row, config, defaultDom) => [
  1069 + defaultDom.save,
  1070 + defaultDom.cancel,
  1071 + ],
  1072 + }}
  1073 + request={async (params) => {
  1074 + const res = await postServiceBankStatementQueryBankStatement({
  1075 + data: { ...params },
  1076 + });
  1077 + if (res) {
  1078 + return {
  1079 + data: res?.data?.data || [],
  1080 + total: res?.data?.total || 0,
  1081 + };
  1082 + }
  1083 + }}
  1084 + columnsState={{
  1085 + persistenceKey: 'pro-table-singe-demos',
  1086 + persistenceType: 'localStorage',
  1087 + defaultValue: {
  1088 + option: { fixed: 'right', disable: true },
  1089 + },
  1090 + onChange(value) {
  1091 + console.log('value: ', value);
  1092 + },
  1093 + }}
  1094 + rowKey="id"
  1095 + search={{
  1096 + labelWidth: 'auto',
  1097 + }}
  1098 + options={{
  1099 + setting: {
  1100 + listsHeight: 400,
  1101 + },
  1102 + }}
  1103 + form={{}}
  1104 + dateFormatter="string"
  1105 + headerTitle="银行流水列表"
  1106 + scroll={{ x: 1400, y: 360 }}
  1107 + toolBarRender={() => [
  1108 + <Button
  1109 + key="button"
  1110 + icon={<PlusOutlined />}
  1111 + onClick={() => {
  1112 + setBankImportModalVisible(true);
  1113 + }}
  1114 + type="primary"
  1115 + >
  1116 + 导入
  1117 + </Button>,
  1118 + ]}
  1119 + />
  1120 + ),
  1121 + },
  1122 + ];
  1123 + return (
  1124 + <div className="invoice-index">
  1125 + <Tabs
  1126 + defaultActiveKey="1"
  1127 + items={tabsItems}
  1128 + onChange={(value) => {
  1129 + if (value === 1) {
  1130 + invoiceActionRef.current?.reload();
  1131 + } else {
  1132 + bankActionRef.current?.reload();
  1133 + }
  1134 + }}
  1135 + />
  1136 +
  1137 + {bankImportModalVisible ? (
  1138 + <BankImportModal
  1139 + setVisible={setBankImportModalVisible}
  1140 + onClose={() => {
  1141 + setBankImportModalVisible(false);
  1142 + invoiceActionRef.current?.reload();
  1143 + bankActionRef.current?.reload();
  1144 + }}
  1145 + ></BankImportModal>
  1146 + ) : (
  1147 + ''
  1148 + )}
  1149 +
  1150 + {invoiceVerificationVisible ? (
  1151 + <InvoiceVerificationModal
  1152 + setVisible={setInvoiceVerificationVisible}
  1153 + invoiceId={invoiceId}
  1154 + onClose={() => {
  1155 + invoiceActionRef.current?.reload();
  1156 + bankActionRef.current?.reload();
  1157 + }}
  1158 + ></InvoiceVerificationModal>
  1159 + ) : (
  1160 + ''
  1161 + )}
  1162 + {invoiceRecordDetailVisible ? (
  1163 + <InvoiceRecordDetailModal
  1164 + key="detail"
  1165 + id={invoiceRecord.id}
  1166 + setVisible={setInvoiceRecordDetailVisible}
  1167 + />
  1168 + ) : (
  1169 + ''
  1170 + )}
  1171 + {contextHolder}
  1172 + </div>
  1173 + );
  1174 +};
  1175 +
  1176 +export default InvoiceRecord;
... ...
src/pages/Invoice/components/Invoice.tsx
... ... @@ -155,10 +155,7 @@ export default ({ data }) =&gt; {
155 155 </Col>
156 156 <Col className="title col_18 no-border">
157 157 电子发票(
158   - {data.type === 'SPECIAL_TICKET'
159   - ? '增值税专用发票'
160   - : '增值税普通发票'}
161   - )
  158 + {data.type === 'SPECIAL_TICKET' ? '增值税专用发票' : '普通发票'})
162 159 </Col>
163 160 <UnderLine className="UnderLine">
164 161 <div></div>
... ... @@ -198,13 +195,13 @@ export default ({ data }) =&gt; {
198 195 <Col className="">
199 196 <div className="text-center">单位</div>
200 197 </Col>
201   - <Col className="">
  198 + <Col className="col_2">
202 199 <div className="text-center">数量</div>
203 200 </Col>
204 201 <Col className="col_2">
205 202 <div className="text-center">单价</div>
206 203 </Col>
207   - <Col className="col_3">
  204 + <Col className="col_2">
208 205 <div className="text-center">金额</div>
209 206 </Col>
210 207 <Col className="">
... ... @@ -242,22 +239,22 @@ export default ({ data }) =&gt; {
242 239 >
243 240 <div className="text-center">{specification}</div>
244 241 </Col>
245   - <Col className="col_4 transparent-border" key={'unit'}>
  242 + <Col className=" transparent-border" key={'unit'}>
246 243 <div className="text-center">{unit}</div>
247 244 </Col>
248   - <Col className="col_4 transparent-border" key={'quantity'}>
  245 + <Col className="col_2 transparent-border" key={'quantity'}>
249 246 <div className="text-center">{quantity}</div>
250 247 </Col>
251 248 <Col className="col_2 transparent-border" key={'price'}>
252 249 <div className="text-center">{price}</div>
253 250 </Col>
254 251 <Col
255   - className="col_3 transparent-border"
  252 + className="col_2 transparent-border"
256 253 key={'totalPrice'}
257 254 >
258 255 <div className="text-center">{totalPrice}</div>
259 256 </Col>
260   - <Col className="col_9 transparent-border" key={'taxRate'}>
  257 + <Col className=" transparent-border" key={'taxRate'}>
261 258 <div className="text-center">{taxRate}</div>
262 259 </Col>
263 260 <Col className="col_2 transparent-border" key={'taxPrice'}>
... ...
src/pages/Invoice/components/InvoiceModal.tsx
... ... @@ -36,6 +36,7 @@ export default ({ recordId, getRecord, button }) =&gt; {
36 36 width={1200}
37 37 form={form}
38 38 autoFocusFirstInput
  39 + submitter={false}
39 40 modalProps={{
40 41 destroyOnClose: true,
41 42 }}
... ...
src/pages/Invoice/components/InvoiceRecordDetailModal.tsx
... ... @@ -12,7 +12,6 @@ import {
12 12 ModalForm,
13 13 ProCard,
14 14 ProForm,
15   - ProFormFieldSet,
16 15 ProFormInstance,
17 16 ProFormList,
18 17 ProFormSelect,
... ... @@ -83,16 +82,15 @@ export default ({ id, setVisible }) =&gt; {
83 82 const data = ret.data;
84 83 const orderIdMap = data.orderIdMap;
85 84 const orderIdList = [];
86   - //遍历orderIdMap属性。
87   - for (const key in orderIdMap) {
88   - if (key in Object.getOwnPropertyNames(orderIdMap)) {
89   - const orderId = {
90   - mainId: key,
91   - subIds: orderIdMap[key],
92   - };
93   - orderIdList.push(orderId);
94   - }
95   - }
  85 +
  86 + // 使用Object.entries()遍历属性
  87 + Object.entries(orderIdMap).forEach(([key, value]) => {
  88 + const orderId = {
  89 + mainId: key,
  90 + subIds: value,
  91 + };
  92 + orderIdList.push(orderId);
  93 + });
96 94 return {
97 95 ...data,
98 96 orderIdList: orderIdList,
... ... @@ -248,53 +246,45 @@ export default ({ id, setVisible }) =&gt; {
248 246 { required: true, message: 'Please select your country!' },
249 247 ]}
250 248 />
251   - <ProFormFieldSet
252   - name="list"
  249 + <ProFormList
253 250 label="订单号"
254   - transform={(value: any) => ({
255   - list: value,
256   - startTime: value[0],
257   - endTime: value[1],
258   - })}
  251 + name="orderIdList"
  252 + creatorButtonProps={false}
  253 + itemRender={({}, { record }) => {
  254 + console.log('record' + JSON.stringify(record));
  255 + return (
  256 + <Space>
  257 + <Button
  258 + key={record.mainId}
  259 + className="pl-1 pr-0"
  260 + type="link"
  261 + target="_blank"
  262 + href={'/order?id=' + record.mainId}
  263 + >
  264 + {record.mainId}
  265 + </Button>
  266 + (
  267 + {record.subIds.map((item) => {
  268 + return (
  269 + <Button
  270 + key={item}
  271 + className="pl-1 pr-0"
  272 + type="link"
  273 + target="_blank"
  274 + href={'/order?subOrderId=' + item}
  275 + >
  276 + {item}
  277 + </Button>
  278 + );
  279 + })}
  280 + )
  281 + <Divider type="vertical" />
  282 + </Space>
  283 + );
  284 + }}
259 285 >
260   - <ProFormList
261   - name="orderIdList"
262   - creatorButtonProps={false}
263   - itemRender={({}, { record }) => {
264   - return (
265   - <Space>
266   - <Button
267   - key={record.mainId}
268   - className="pl-1 pr-0"
269   - type="link"
270   - target="_blank"
271   - href={'/order?id=' + record.mainId}
272   - >
273   - {record.mainId}
274   - </Button>
275   - (
276   - {record.subIds.map((item) => {
277   - return (
278   - <Button
279   - key={item}
280   - className="pl-1 pr-0"
281   - type="link"
282   - target="_blank"
283   - href={'/order?subOrderId=' + item}
284   - >
285   - {item}
286   - </Button>
287   - );
288   - })}
289   - )
290   - <Divider type="vertical" />
291   - </Space>
292   - );
293   - }}
294   - >
295   - <ProFormText allowClear={false} width="xs" name={['name']} />
296   - </ProFormList>
297   - </ProFormFieldSet>
  286 + <ProFormText allowClear={false} width="xs" name={['name']} />
  287 + </ProFormList>
298 288 </ProForm.Group>
299 289 </ProCard>
300 290 <hr />
... ...
src/pages/Invoice/components/InvoicingModal.tsx
1 1 import { RESPONSE_CODE } from '@/constants/enum';
2   -import {
3   - postServiceInvoiceGetInvoicingAccount,
4   - postServiceInvoiceInvoicing,
5   -} from '@/services';
6   -import { ModalForm, ProFormSelect } from '@ant-design/pro-components';
  2 +import { postServiceInvoiceInvoicing } from '@/services';
  3 +import { ModalForm } from '@ant-design/pro-components';
7 4 import { Button, Form, message } from 'antd';
8 5  
9 6 export default ({ selectedRowKeys, reloadRecordTable }) => {
... ... @@ -41,7 +38,7 @@ export default ({ selectedRowKeys, reloadRecordTable }) =&gt; {
41 38 return true;
42 39 }}
43 40 >
44   - <ProFormSelect
  41 + {/*<ProFormSelect
45 42 name="invoicingAccount"
46 43 label="开票账号"
47 44 request={async () => {
... ... @@ -55,7 +52,7 @@ export default ({ selectedRowKeys, reloadRecordTable }) =&gt; {
55 52 }}
56 53 placeholder="请选择开票账号"
57 54 rules={[{ required: true, message: '请选择开票账号!' }]}
58   - />
  55 + />*/}
59 56 </ModalForm>
60 57 );
61 58 };
... ...
src/pages/Invoice/components/ManualInvoicingModal.tsx
... ... @@ -6,11 +6,7 @@ import {
6 6 } from '@/services';
7 7 import {
8 8 ModalForm,
9   - ProCard,
10 9 ProFormDatePicker,
11   - ProFormDigit,
12   - ProFormList,
13   - ProFormMoney,
14 10 ProFormText,
15 11 } from '@ant-design/pro-components';
16 12 import { Col, Form, Row, message } from 'antd';
... ... @@ -52,12 +48,12 @@ export default ({ record }) =&gt; {
52 48 }
53 49 }}
54 50 >
55   - <ProFormText
  51 + {/*<ProFormText
56 52 rules={[{ required: true, message: '此项为必填项' }]}
57 53 width={'md'}
58 54 name="invoicingPerson"
59 55 label="开票人"
60   - />
  56 + />*/}
61 57 <ProFormText
62 58 rules={[{ required: true, message: '此项为必填项' }]}
63 59 width={'md'}
... ... @@ -102,7 +98,7 @@ export default ({ record }) =&gt; {
102 98 ></UploadC>
103 99 </Col>
104 100 </Row>
105   - <ProFormList
  101 + {/*<ProFormList
106 102 name="invoiceDetailDtoList"
107 103 label="明细"
108 104 creatorButtonProps={false}
... ... @@ -128,7 +124,7 @@ export default ({ record }) =&gt; {
128 124 />
129 125 <ProFormDigit label="税率" name="taxRate" min={0} max={100} />
130 126 <ProFormMoney label="税额" name="taxPrice" locale="zh-CN" min={0} />
131   - </ProFormList>
  127 + </ProFormList>*/}
132 128 </ModalForm>
133 129 );
134 130 };
... ...
src/pages/Invoice/index.tsx
... ... @@ -298,7 +298,7 @@ const InvoicePage = () =&gt; {
298 298 {
299 299 title: '申请开票时间',
300 300 dataIndex: 'createTime',
301   - valueType: 'dateRange',
  301 + valueType: 'dateTimeRange',
302 302 width: 200,
303 303 hideInTable: true,
304 304 search: {
... ... @@ -319,24 +319,32 @@ const InvoicePage = () =&gt; {
319 319 render: (text, record) => {
320 320 return [
321 321 /*<InvoiceRecordDetailModal
322   - key="detail"
323   - id={record.id}
324   - subOrderIds={record.subOrderIds}
325   - onClose={()=>{
326   - waitDealrecordActionRef.current?.reload();
327   - }
328   - }
329   - />*/
330   - <a
331   - key="detail"
332   - onClick={() => {
333   - setInvoiceRecordDetailVisible(true);
334   - setInvoiceRecord(record);
335   - }}
336   - >
337   - 详情
338   - </a>,
339   - <InvoiceModal key="invoiceModal" recordId={record.id} />,
  322 + key="detail"
  323 + id={record.id}
  324 + subOrderIds={record.subOrderIds}
  325 + onClose={()=>{
  326 + waitDealrecordActionRef.current?.reload();
  327 + }
  328 + }
  329 + />*/
  330 + <>
  331 + {record.paths.includes('DETAIL') && (
  332 + <a
  333 + key="detail"
  334 + onClick={() => {
  335 + setInvoiceRecordDetailVisible(true);
  336 + setInvoiceRecord(record);
  337 + }}
  338 + >
  339 + 详情
  340 + </a>
  341 + )}
  342 + </>,
  343 + <>
  344 + {record.paths.includes('PREVIEW') && (
  345 + <InvoiceModal key="invoiceModal" recordId={record.id} />
  346 + )}
  347 + </>,
340 348 <>
341 349 {record.paths.includes('INVOICING') && (
342 350 <ManualInvoicingModal
... ... @@ -371,8 +379,8 @@ const InvoicePage = () =&gt; {
371 379 },
372 380 {
373 381 title: '开票日期',
374   - dataIndex: 'invoicingTime',
375   - valueType: 'dateTime',
  382 + dataIndex: 'invoicingDate',
  383 + valueType: 'date',
376 384 hideInSearch: true,
377 385 ellipsis: true,
378 386 },
... ... @@ -491,15 +499,15 @@ const InvoicePage = () =&gt; {
491 499 },
492 500 {
493 501 title: '开票日期',
494   - dataIndex: 'invoicingTime',
  502 + dataIndex: 'invoicingDate',
495 503 valueType: 'dateRange',
496 504 hideInTable: true,
497 505 search: {
498 506 transform: (value) => {
499 507 if (value) {
500 508 return {
501   - invoicingTimeGe: value[0],
502   - invoicingTimeLe: value[1],
  509 + invoicingDateGe: value[0],
  510 + invoicingDateLe: value[1],
503 511 };
504 512 }
505 513 },
... ... @@ -519,28 +527,29 @@ const InvoicePage = () =&gt; {
519 527 valueType: 'option',
520 528 key: 'option',
521 529 render: (text, record) => [
522   - <a
523   - key="detail"
524   - onClick={() => {
525   - setInvoiceRecordDetailVisible(true);
526   - setInvoiceRecord(record);
527   - }}
528   - >
529   - 详情
530   - </a>,
531 530 <>
532   - {record.status === 'SUCCESS' && (
533   - <>
534   - {record.status === 'SUCCESS' && (
535   - <a href={record.invoiceAddress} download>
536   - 下载发票
537   - </a>
538   - )}
539   - </>
  531 + {record.status === 'SUCCESS' && record.paths.includes('DETAIL') && (
  532 + <a
  533 + key="detail"
  534 + onClick={() => {
  535 + setInvoiceRecordDetailVisible(true);
  536 + setInvoiceRecord(record);
  537 + }}
  538 + >
  539 + 详情
  540 + </a>
540 541 )}
541 542 </>,
542 543 <>
543   - {record.status === 'FAIL' && (
  544 + {record.status === 'SUCCESS' &&
  545 + record.paths.includes('DOWNLOAD_INVOICE') && (
  546 + <a href={record.invoiceAddress} download>
  547 + 下载发票
  548 + </a>
  549 + )}
  550 + </>,
  551 + <>
  552 + {record.status === 'FAIL' && record.paths.includes('RETRY') && (
544 553 <ModalForm
545 554 title="提示"
546 555 trigger={
... ... @@ -831,7 +840,8 @@ const InvoicePage = () =&gt; {
831 840 actionRef={waitDealrecordActionRef}
832 841 cardBordered
833 842 pagination={{
834   - pageSize: 10,
  843 + showSizeChanger: true, // 显示可以选择每页显示条数的下拉菜单
  844 + pageSizeOptions: ['10', '20', '50', '100'], // 设置可以选择的每页显示条数选项
835 845 }}
836 846 rowSelection={{
837 847 selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],
... ... @@ -904,7 +914,8 @@ const InvoicePage = () =&gt; {
904 914 actionRef={processedRecordRef}
905 915 cardBordered
906 916 pagination={{
907   - pageSize: 10,
  917 + showSizeChanger: true, // 显示可以选择每页显示条数的下拉菜单
  918 + pageSizeOptions: ['10', '20', '50', '100'], // 设置可以选择的每页显示条数选项
908 919 }}
909 920 editable={{
910 921 type: 'multiple',
... ...
src/pages/Order/components/InvoicingDrawerForm.tsx
... ... @@ -2,6 +2,7 @@
2 2 import InvoiceModal from '@/pages/Invoice/components/InvoiceModal';
3 3 import {
4 4 postServiceConstGetPayeeEnum,
  5 + postServiceConstInitInvoiceDetailNames,
5 6 postServiceConstInvoiceType,
6 7 postServiceConstInvoicingType,
7 8 postServiceConstListInvoiceDetailNames,
... ... @@ -15,33 +16,91 @@ import {
15 16 ProCard,
16 17 ProFormDigit,
17 18 ProFormGroup,
  19 + ProFormInstance,
18 20 ProFormList,
19 21 ProFormMoney,
20 22 ProFormSelect,
21 23 ProFormText,
22 24 ProFormTextArea,
23 25 } from '@ant-design/pro-components';
24   -import { Button, Divider, Form } from 'antd';
25   -import { useEffect } from 'react';
  26 +import { Button, Divider, Form, Space, Tooltip, message } from 'antd';
  27 +import { useEffect, useRef, useState } from 'react';
26 28  
27 29 export default ({ dataList, setVisible, onClose }) => {
28 30 // let subOrderIds = dataList?.map((item) => {
29 31 // return item.id;
30   - // });
  32 + // })
31 33 const [form] = Form.useForm();
  34 + const [projectOptions] = useState();
  35 + const [dataListCopy] = useState(dataList);
  36 + const formRef = useRef<ProFormInstance>();
  37 + useEffect(() => {
  38 + const initOptions = async () => {
  39 + const res = await postServiceConstInitInvoiceDetailNames({
  40 + data: dataListCopy.map((item) => {
  41 + return item.productName;
  42 + }),
  43 + });
  44 + const options = res.data;
  45 + const datas = dataListCopy.map((item) => {
  46 + return {
  47 + ...item,
  48 + projectName: options[item.productName],
  49 + };
  50 + });
  51 + const initialValue = datas.map((item) => {
  52 + return {
  53 + productName: item.productName,
  54 + projectName: item.projectName,
  55 + subOrderId: item.id,
  56 + specification: item.parameters,
  57 + unit: item.unit,
  58 + quantity: item.quantity,
  59 + price: item.productPrice,
  60 + totalPrice: item.subOrderPayment,
  61 + };
  62 + });
  63 + form.setFieldValue('invoiceDetails', initialValue);
  64 + };
  65 + initOptions();
  66 + }, []);
  67 +
  68 + useEffect(() => {}, [projectOptions]);
  69 +
  70 + function copyToClipboard(text: string) {
  71 + // 创建一个临时的textarea元素
  72 + const textarea = document.createElement('textarea');
  73 + textarea.value = text;
  74 +
  75 + // 将textarea元素添加到DOM中
  76 + document.body.appendChild(textarea);
  77 +
  78 + // 选中textarea中的文本
  79 + textarea.select();
  80 +
  81 + try {
  82 + // 尝试执行复制命令
  83 + document.execCommand('copy');
  84 + return true;
  85 + } catch (err) {
  86 + return false;
  87 + } finally {
  88 + // 移除临时的textarea元素
  89 + document.body.removeChild(textarea);
  90 + }
  91 + }
  92 +
32 93 useEffect(() => {}, []);
33 94 return (
34 95 <DrawerForm
35 96 open
36   - title="合并开票"
  97 + title="申请开票"
37 98 resize={{
38   - onResize() {
39   - console.log('resize!');
40   - },
41 99 maxWidth: window.innerWidth * 0.8,
42 100 minWidth: 500,
43 101 }}
44 102 form={form}
  103 + formRef={formRef}
45 104 autoFocusFirstInput
46 105 drawerProps={{
47 106 destroyOnClose: true,
... ... @@ -53,12 +112,11 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
53 112 key={'invoicePreview'}
54 113 button={<Button type="primary"> 发票预览 </Button>}
55 114 getRecord={() => {
56   - const totalPrice = dataList.reduce(
57   - (accumulator, currentValue) => {
58   - return accumulator + currentValue.subOrderPayment;
59   - },
60   - 0,
61   - );
  115 + const totalPrice = form
  116 + .getFieldValue('invoiceDetails')
  117 + .reduce((accumulator, currentValue) => {
  118 + return accumulator + currentValue.totalPrice;
  119 + }, 0);
62 120 return {
63 121 ...form.getFieldsValue(),
64 122 totalPrice: totalPrice,
... ... @@ -75,7 +133,7 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
75 133 postServiceInvoiceApplyInvoice({
76 134 data: {
77 135 ...values,
78   - subOrderIds: dataList.map((item) => {
  136 + subOrderIds: dataListCopy.map((item) => {
79 137 return item.id;
80 138 }),
81 139 },
... ... @@ -90,7 +148,7 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
90 148 name="subOrderIdObjs"
91 149 readonly={true}
92 150 label="开票订单"
93   - initialValue={dataList.map((item) => {
  151 + initialValue={dataListCopy.map((item) => {
94 152 return {
95 153 value: item.id,
96 154 };
... ... @@ -181,7 +239,7 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
181 239 name="price"
182 240 locale="zh-CN"
183 241 rules={[{ required: true, message: '请填写开票金额!' }]}
184   - initialValue={dataList.reduce((accumulator, currentValue) => {
  242 + initialValue={dataListCopy.reduce((accumulator, currentValue) => {
185 243 return accumulator + currentValue.subOrderPayment;
186 244 }, 0)}
187 245 />
... ... @@ -257,23 +315,24 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
257 315 <ProFormList
258 316 name="invoiceDetails"
259 317 label="开票明细"
260   - initialValue={dataList.map((item) => {
261   - console.log('item:' + JSON.stringify(item));
262   - return {
263   - subOrderId: item.id,
264   - /*projectName: item.productName,*/
265   - specification: item.parameters,
266   - unit: item.unit,
267   - quantity: item.quantity,
268   - price: item.productPrice,
269   - totalPrice: item.subOrderPayment,
270   - };
271   - })}
  318 + /*initialValue={dataListCopy.map((item) => {
  319 + console.log("item"+JSON.stringify(item));
  320 + return {
  321 + productName: item.productName,
  322 + projectName: item.projectName,
  323 + subOrderId: item.id,
  324 + /!*projectName: item.productName,*!/
  325 + specification: item.parameters,
  326 + unit: item.unit,
  327 + quantity: item.quantity,
  328 + price: item.productPrice,
  329 + totalPrice: item.subOrderPayment,
  330 + };
  331 + })}*/
272 332 rules={[
273 333 {
274 334 required: true,
275 335 validator: async (_, value) => {
276   - console.log(value);
277 336 if (value && value.length > 0) {
278 337 return;
279 338 }
... ... @@ -282,7 +341,6 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
282 341 },
283 342 ]}
284 343 itemRender={(doms, listMeta) => {
285   - console.log(listMeta);
286 344 return (
287 345 <ProCard
288 346 bordered
... ... @@ -292,12 +350,23 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
292 350 marginBlockEnd: 8,
293 351 }}
294 352 >
295   - <ProFormText
296   - key={'subOrderId' + listMeta.index}
297   - name="subOrderId"
298   - label="子订单id"
299   - hidden
300   - />
  353 + <Tooltip title="点击复制商品名称">
  354 + <Space
  355 + className="hover:cursor-pointer"
  356 + style={{
  357 + margin: 16,
  358 + marginTop: 4,
  359 + marginLeft: 0,
  360 + fontSize: 15,
  361 + }}
  362 + onClick={() => {
  363 + copyToClipboard(listMeta.record.productName);
  364 + message.info('商品名称复制成功!');
  365 + }}
  366 + >
  367 + 商品名称:{listMeta.record.productName}
  368 + </Space>
  369 + </Tooltip>
301 370 <ProFormSelect
302 371 key={'projectName' + listMeta.index}
303 372 width="md"
... ... @@ -343,12 +412,14 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
343 412 option.productAndServiceCatagoryAbbreviation +
344 413 '*' +
345 414 option.name;
346   - currentData.specification = option.specification;
347   - currentData.unit = option.unit;
  415 + console.log(
  416 + 'copyList' + JSON.stringify(listMeta.record.projectName),
  417 + );
348 418 form.setFieldValue('invoiceDetails', copyList);
349 419 }}
350 420 debounceTime={1000}
351 421 label="项目名称"
  422 + initialValue={listMeta.record.projectName}
352 423 placeholder="请输入名称"
353 424 />
354 425 <ProFormText
... ... @@ -377,8 +448,6 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
377 448 len += 1; // 半角字符
378 449 }
379 450 }
380   - console.log(value);
381   - console.log(len);
382 451 if (len <= 40) {
383 452 return Promise.resolve();
384 453 }
... ... @@ -400,18 +469,46 @@ export default ({ dataList, setVisible, onClose }) =&gt; {
400 469 key={'quantity' + listMeta.index}
401 470 label="数量"
402 471 name="quantity"
403   - min={0}
  472 + rules={[
  473 + {
  474 + validator: (_, value) => {
  475 + if (value === undefined || value > 0) {
  476 + return Promise.resolve();
  477 + }
  478 + return Promise.reject(new Error('数量必须大于0'));
  479 + },
  480 + },
  481 + ]}
404 482 />
405 483 <ProFormDigit
406 484 key={'price' + listMeta.index}
407 485 label="单价"
408 486 name="price"
409   - min={0}
  487 + rules={[
  488 + {
  489 + validator: (_, value) => {
  490 + if (value === undefined || value > 0) {
  491 + return Promise.resolve();
  492 + }
  493 + return Promise.reject(new Error('单价必须大于0'));
  494 + },
  495 + },
  496 + ]}
410 497 />
411 498 <ProFormMoney
412 499 key={'totalPrice' + listMeta.index}
413 500 label="金额"
414 501 name="totalPrice"
  502 + rules={[
  503 + {
  504 + validator: (_, value) => {
  505 + if (value === undefined || value > 0) {
  506 + return Promise.resolve();
  507 + }
  508 + return Promise.reject(new Error('金额必须大于0'));
  509 + },
  510 + },
  511 + ]}
415 512 locale="zh-CN"
416 513 />
417 514 </ProCard>
... ...
src/pages/Order/index.tsx
... ... @@ -1283,7 +1283,7 @@ const OrderPage = () =&gt; {
1283 1283 </div>
1284 1284 </Flex>
1285 1285 <Flex className="w-[18%]" wrap="wrap" gap="small">
1286   - {optRecord.subPath?.includes('postAudit') ? (
  1286 + {optRecord.paths?.includes('postAudit') ? (
1287 1287 <Button
1288 1288 className="p-0"
1289 1289 type="link"
... ... @@ -1299,7 +1299,7 @@ const OrderPage = () =&gt; {
1299 1299 ''
1300 1300 )}
1301 1301 {/* 加急审核 */}
1302   - {optRecord.subPath?.includes('URGENT_INVOICE_AUDITING') ? (
  1302 + {optRecord.paths?.includes('URGENT_INVOICE_AUDITING') ? (
1303 1303 <Button
1304 1304 className="p-0"
1305 1305 type="link"
... ... @@ -1316,7 +1316,7 @@ const OrderPage = () =&gt; {
1316 1316 ) : (
1317 1317 ''
1318 1318 )}
1319   - {optRecord.subPath?.includes('URGENT_INVOICE_AUDITING_old') ? (
  1319 + {optRecord.paths?.includes('URGENT_INVOICE_AUDITING_old') ? (
1320 1320 <Button
1321 1321 className="p-0"
1322 1322 type="link"
... ... @@ -1333,7 +1333,7 @@ const OrderPage = () =&gt; {
1333 1333 ) : (
1334 1334 ''
1335 1335 )}
1336   - {optRecord.subPath?.includes('salesConfirm') && (
  1336 + {optRecord.paths?.includes('salesConfirm') && (
1337 1337 <ButtonConfirm
1338 1338 className="p-0"
1339 1339 title="是否确认此商城订单信息无误?确认无误之后订单将进入审核流程。"
... ... @@ -1352,7 +1352,7 @@ const OrderPage = () =&gt; {
1352 1352 }}
1353 1353 />
1354 1354 )}
1355   - {optRecord.subPath?.includes('uploadPaymentReceiptBill') ? (
  1355 + {optRecord.paths?.includes('uploadPaymentReceiptBill') ? (
1356 1356 <Button
1357 1357 className="p-0"
1358 1358 type="link"
... ... @@ -1366,7 +1366,7 @@ const OrderPage = () =&gt; {
1366 1366 ) : (
1367 1367 ''
1368 1368 )}
1369   - {optRecord.subPath?.includes('reissue_old') ? (
  1369 + {optRecord.paths?.includes('reissue_old') ? (
1370 1370 /*optRecord.afterInvoicingStatus==='PARTIAL_INVOICING'||
1371 1371 optRecord.afterInvoicingStatus==='COMPLETE_INVOICING'*/
1372 1372 <Button
... ... @@ -1382,7 +1382,7 @@ const OrderPage = () =&gt; {
1382 1382 ) : (
1383 1383 ''
1384 1384 )}
1385   - {optRecord.subPath?.includes('reissue') ? (
  1385 + {optRecord.paths?.includes('reissue') ? (
1386 1386 /*optRecord.afterInvoicingStatus==='PARTIAL_INVOICING'||
1387 1387 optRecord.afterInvoicingStatus==='COMPLETE_INVOICING'*/
1388 1388 <Button
... ... @@ -1400,7 +1400,7 @@ const OrderPage = () =&gt; {
1400 1400 ''
1401 1401 )}
1402 1402  
1403   - {optRecord.subPath?.includes('confirmReissue_old') ? (
  1403 + {optRecord.paths?.includes('confirmReissue_old') ? (
1404 1404 <Button
1405 1405 className="p-0"
1406 1406 type="link"
... ... @@ -1416,7 +1416,7 @@ const OrderPage = () =&gt; {
1416 1416 ) : (
1417 1417 ''
1418 1418 )}
1419   - {optRecord.subPath?.includes('confirmReissue') ? (
  1419 + {optRecord.paths?.includes('confirmReissue') ? (
1420 1420 <Button
1421 1421 className="p-0"
1422 1422 type="link"
... ... @@ -1433,7 +1433,7 @@ const OrderPage = () =&gt; {
1433 1433 ''
1434 1434 )}
1435 1435  
1436   - {optRecord.subPath?.includes('leaderAudit') ? (
  1436 + {optRecord.paths?.includes('leaderAudit') ? (
1437 1437 <Button
1438 1438 className="p-0"
1439 1439 type="link"
... ... @@ -1450,7 +1450,7 @@ const OrderPage = () =&gt; {
1450 1450 ''
1451 1451 )}
1452 1452  
1453   - {optRecord.subPath?.includes('creditAudit') ? (
  1453 + {optRecord.paths?.includes('creditAudit') ? (
1454 1454 <Button
1455 1455 className="p-0"
1456 1456 type="link"
... ... @@ -1467,7 +1467,7 @@ const OrderPage = () =&gt; {
1467 1467 ''
1468 1468 )}
1469 1469  
1470   - {optRecord.subPath?.includes('auditPaymentReceipt') ? (
  1470 + {optRecord.paths?.includes('auditPaymentReceipt') ? (
1471 1471 <Button
1472 1472 className="p-0"
1473 1473 type="link"
... ... @@ -1483,7 +1483,7 @@ const OrderPage = () =&gt; {
1483 1483 ''
1484 1484 )}
1485 1485  
1486   - {optRecord.subPath?.includes('modifiedAuditRequest') ? (
  1486 + {optRecord.paths?.includes('modifiedAuditRequest') ? (
1487 1487 <Button
1488 1488 className="p-0"
1489 1489 type="link"
... ... @@ -1499,7 +1499,7 @@ const OrderPage = () =&gt; {
1499 1499 ''
1500 1500 )}
1501 1501  
1502   - {optRecord.subPath?.includes('applyModify') ? (
  1502 + {optRecord.paths?.includes('applyModify') ? (
1503 1503 <Button
1504 1504 className="p-0"
1505 1505 type="link"
... ... @@ -1515,7 +1515,7 @@ const OrderPage = () =&gt; {
1515 1515 ''
1516 1516 )}
1517 1517  
1518   - {optRecord.subPath?.includes('modifiedLeaderAuditRequest') ? (
  1518 + {optRecord.paths?.includes('modifiedLeaderAuditRequest') ? (
1519 1519 <Button
1520 1520 className="p-0"
1521 1521 type="link"
... ... @@ -1531,7 +1531,7 @@ const OrderPage = () =&gt; {
1531 1531 ''
1532 1532 )}
1533 1533  
1534   - {optRecord.subPath?.includes('shippingWarehouseChangeRequest') ? (
  1534 + {optRecord.paths?.includes('shippingWarehouseChangeRequest') ? (
1535 1535 <Button
1536 1536 className="p-0"
1537 1537 type="link"
... ... @@ -1547,7 +1547,7 @@ const OrderPage = () =&gt; {
1547 1547 ''
1548 1548 )}
1549 1549  
1550   - {optRecord.subPath?.includes('saleCancelInvoicing_old') ? (
  1550 + {optRecord.paths?.includes('saleCancelInvoicing_old') ? (
1551 1551 <ButtonConfirm
1552 1552 className="p-0"
1553 1553 title="确认取消申请开票?"
... ... @@ -1568,7 +1568,7 @@ const OrderPage = () =&gt; {
1568 1568 ) : (
1569 1569 ''
1570 1570 )}
1571   - {optRecord.subPath?.includes('saleCancelInvoicing') ? (
  1571 + {optRecord.paths?.includes('saleCancelInvoicing') ? (
1572 1572 <ButtonConfirm
1573 1573 className="p-0"
1574 1574 title="确认取消申请开票?"
... ... @@ -1589,7 +1589,7 @@ const OrderPage = () =&gt; {
1589 1589 ) : (
1590 1590 ''
1591 1591 )}
1592   - {optRecord.subPath?.includes('noNeedInvoicingEdit') ? (
  1592 + {optRecord.paths?.includes('noNeedInvoicingEdit') ? (
1593 1593 <Button
1594 1594 className="p-0"
1595 1595 type="link"
... ... @@ -1604,7 +1604,7 @@ const OrderPage = () =&gt; {
1604 1604 ) : (
1605 1605 ''
1606 1606 )}
1607   - {optRecord.subPath?.includes('sendProduct') ? (
  1607 + {optRecord.paths?.includes('sendProduct') ? (
1608 1608 <Button
1609 1609 className="p-0"
1610 1610 type="link"
... ... @@ -1621,7 +1621,7 @@ const OrderPage = () =&gt; {
1621 1621 ''
1622 1622 )}
1623 1623  
1624   - {optRecord.subPath?.includes('supplierSendOrder') ? (
  1624 + {optRecord.paths?.includes('supplierSendOrder') ? (
1625 1625 <Button
1626 1626 className="p-0"
1627 1627 type="link"
... ... @@ -1639,7 +1639,7 @@ const OrderPage = () =&gt; {
1639 1639 ''
1640 1640 )}
1641 1641  
1642   - {optRecord.subPath?.includes('procureSend') ? (
  1642 + {optRecord.paths?.includes('procureSend') ? (
1643 1643 <Button
1644 1644 className="p-0"
1645 1645 type="link"
... ... @@ -1656,7 +1656,7 @@ const OrderPage = () =&gt; {
1656 1656 ''
1657 1657 )}
1658 1658  
1659   - {optRecord.subPath?.includes('editProductionTime') ? (
  1659 + {optRecord.paths?.includes('editProductionTime') ? (
1660 1660 <Button
1661 1661 className="p-0"
1662 1662 type="link"
... ... @@ -1671,7 +1671,7 @@ const OrderPage = () =&gt; {
1671 1671 ''
1672 1672 )}
1673 1673  
1674   - {optRecord.subPath?.includes('queryAnnex') &&
  1674 + {optRecord.paths?.includes('queryAnnex') &&
1675 1675 optRecord.listAnnex?.length > 0 ? (
1676 1676 <Button
1677 1677 className="p-0"
... ... @@ -1688,7 +1688,7 @@ const OrderPage = () =&gt; {
1688 1688 ''
1689 1689 )}
1690 1690  
1691   - {optRecord.subPath?.includes('modifySendInformation') ? (
  1691 + {optRecord.paths?.includes('modifySendInformation') ? (
1692 1692 <Button
1693 1693 className="p-0"
1694 1694 type="link"
... ... @@ -1704,7 +1704,7 @@ const OrderPage = () =&gt; {
1704 1704 ''
1705 1705 )}
1706 1706  
1707   - {optRecord.subPath?.includes('printOrder') ? (
  1707 + {optRecord.paths?.includes('printOrder') ? (
1708 1708 <Button
1709 1709 className="p-0"
1710 1710 type="link"
... ... @@ -1720,7 +1720,7 @@ const OrderPage = () =&gt; {
1720 1720 ''
1721 1721 )}
1722 1722  
1723   - {optRecord.subPath?.includes('supplierPrint') ? (
  1723 + {optRecord.paths?.includes('supplierPrint') ? (
1724 1724 <Button
1725 1725 className="p-0"
1726 1726 type="link"
... ... @@ -1736,7 +1736,7 @@ const OrderPage = () =&gt; {
1736 1736 ''
1737 1737 )}
1738 1738  
1739   - {optRecord.subPath?.includes('procurePrint') ? (
  1739 + {optRecord.paths?.includes('procurePrint') ? (
1740 1740 <ButtonConfirm
1741 1741 className="p-0"
1742 1742 title="确认打印?"
... ... @@ -1770,7 +1770,7 @@ const OrderPage = () =&gt; {
1770 1770 ''
1771 1771 )}
1772 1772  
1773   - {optRecord.subPath?.includes('editOrder') && false ? (
  1773 + {optRecord.paths?.includes('editOrder') && false ? (
1774 1774 <Button
1775 1775 className="p-0"
1776 1776 type="link"
... ... @@ -1786,7 +1786,7 @@ const OrderPage = () =&gt; {
1786 1786 ''
1787 1787 )}
1788 1788  
1789   - {optRecord.subPath?.includes('invoicing') ? (
  1789 + {optRecord.paths?.includes('invoicing') ? (
1790 1790 <Button
1791 1791 className="p-0"
1792 1792 type="link"
... ... @@ -1803,7 +1803,7 @@ const OrderPage = () =&gt; {
1803 1803 ''
1804 1804 )}
1805 1805  
1806   - {optRecord.subPath?.includes('applyInvoicing') ? (
  1806 + {optRecord.paths?.includes('applyInvoicing') ? (
1807 1807 <Button
1808 1808 className="p-0"
1809 1809 type="link"
... ... @@ -1820,7 +1820,7 @@ const OrderPage = () =&gt; {
1820 1820 ''
1821 1821 )}
1822 1822  
1823   - {optRecord.subPath?.includes('applyInvoicing_old') ? (
  1823 + {optRecord.paths?.includes('applyInvoicing_old') ? (
1824 1824 <Button
1825 1825 className="p-0"
1826 1826 type="link"
... ... @@ -1837,7 +1837,7 @@ const OrderPage = () =&gt; {
1837 1837 ''
1838 1838 )}
1839 1839  
1840   - {optRecord.subPath?.includes('checkOrder') ? (
  1840 + {optRecord.paths?.includes('checkOrder') ? (
1841 1841 <Button
1842 1842 className="p-0"
1843 1843 type="link"
... ... @@ -1854,7 +1854,7 @@ const OrderPage = () =&gt; {
1854 1854 ''
1855 1855 )}
1856 1856  
1857   - {optRecord.subPath?.includes('afterSalesCheck') ? (
  1857 + {optRecord.paths?.includes('afterSalesCheck') ? (
1858 1858 <Button
1859 1859 className="p-0"
1860 1860 type="link"
... ... @@ -1870,7 +1870,7 @@ const OrderPage = () =&gt; {
1870 1870 ''
1871 1871 )}
1872 1872  
1873   - {optRecord.subPath?.includes('financeCheckOrder') ? (
  1873 + {optRecord.paths?.includes('financeCheckOrder') ? (
1874 1874 <Button
1875 1875 className="p-0"
1876 1876 type="link"
... ... @@ -1886,7 +1886,7 @@ const OrderPage = () =&gt; {
1886 1886 ''
1887 1887 )}
1888 1888  
1889   - {optRecord.subPath?.includes('procureCheckOrder') ? (
  1889 + {optRecord.paths?.includes('procureCheckOrder') ? (
1890 1890 <Button
1891 1891 className="p-0"
1892 1892 type="link"
... ... @@ -1902,7 +1902,7 @@ const OrderPage = () =&gt; {
1902 1902 ''
1903 1903 )}
1904 1904  
1905   - {optRecord.subPath?.includes('procureConvertProcure') ? (
  1905 + {optRecord.paths?.includes('procureConvertProcure') ? (
1906 1906 <Button
1907 1907 className="p-0"
1908 1908 type="link"
... ... @@ -1918,7 +1918,7 @@ const OrderPage = () =&gt; {
1918 1918 ''
1919 1919 )}
1920 1920  
1921   - {optRecord.subPath?.includes('rePrintOrder') ? (
  1921 + {optRecord.paths?.includes('rePrintOrder') ? (
1922 1922 <Button
1923 1923 className="p-0"
1924 1924 type="link"
... ... @@ -1934,7 +1934,7 @@ const OrderPage = () =&gt; {
1934 1934 ''
1935 1935 )}
1936 1936  
1937   - {optRecord.subPath?.includes('confirmReceipt') ? (
  1937 + {optRecord.paths?.includes('confirmReceipt') ? (
1938 1938 <Button
1939 1939 className="p-0"
1940 1940 type="link"
... ... @@ -1949,7 +1949,7 @@ const OrderPage = () =&gt; {
1949 1949 ''
1950 1950 )}
1951 1951  
1952   - {optRecord.subPath?.includes('applyAfterSales') ? (
  1952 + {optRecord.paths?.includes('applyAfterSales') ? (
1953 1953 <Button
1954 1954 className="p-0"
1955 1955 type="link"
... ... @@ -1965,7 +1965,7 @@ const OrderPage = () =&gt; {
1965 1965 ''
1966 1966 )}
1967 1967  
1968   - {optRecord.subPath?.includes('procureOrder') ? (
  1968 + {optRecord.paths?.includes('procureOrder') ? (
1969 1969 <ButtonConfirm
1970 1970 className="p-0"
1971 1971 title="是否已下单?"
... ... @@ -1985,7 +1985,7 @@ const OrderPage = () =&gt; {
1985 1985 ''
1986 1986 )}
1987 1987  
1988   - {optRecord.subPath?.includes('cancelSend') ? (
  1988 + {optRecord.paths?.includes('cancelSend') ? (
1989 1989 <ButtonConfirm
1990 1990 className="p-0"
1991 1991 title="是否取消发货"
... ... @@ -2005,7 +2005,7 @@ const OrderPage = () =&gt; {
2005 2005 ''
2006 2006 )}
2007 2007  
2008   - {optRecord.subPath?.includes('noNeedSend') ? (
  2008 + {optRecord.paths?.includes('noNeedSend') ? (
2009 2009 <ButtonConfirm
2010 2010 className="p-0"
2011 2011 title="此订单是否无需发货?"
... ... @@ -2025,7 +2025,7 @@ const OrderPage = () =&gt; {
2025 2025 ''
2026 2026 )}
2027 2027  
2028   - {optRecord.subPath?.includes('viewImages') ? (
  2028 + {optRecord.paths?.includes('viewImages') ? (
2029 2029 <Button
2030 2030 className="p-0"
2031 2031 type="link"
... ... @@ -2041,7 +2041,7 @@ const OrderPage = () =&gt; {
2041 2041 ''
2042 2042 )}
2043 2043  
2044   - {optRecord.subPath?.includes('confirmDeliver') ? (
  2044 + {optRecord.paths?.includes('confirmDeliver') ? (
2045 2045 <Button
2046 2046 className="p-0"
2047 2047 type="link"
... ... @@ -2057,7 +2057,7 @@ const OrderPage = () =&gt; {
2057 2057 ''
2058 2058 )}
2059 2059  
2060   - {optRecord.subPath?.includes('orderCancel') ? (
  2060 + {optRecord.paths?.includes('orderCancel') ? (
2061 2061 <ButtonConfirm
2062 2062 className="p-0"
2063 2063 title="确认作废?"
... ... @@ -2677,7 +2677,7 @@ const OrderPage = () =&gt; {
2677 2677 <Flex justify="flex-end">
2678 2678 <Space.Compact direction="vertical" align="end">
2679 2679 <Space wrap>
2680   - {record.mainPath?.includes('postAudit') ? (
  2680 + {record.paths?.includes('postAudit') ? (
2681 2681 <Button
2682 2682 className="p-0"
2683 2683 type="link"
... ... @@ -2693,7 +2693,7 @@ const OrderPage = () =&gt; {
2693 2693 ) : (
2694 2694 ''
2695 2695 )}
2696   - {record.mainPath?.includes('URGENT_INVOICE_AUDITING') ? (
  2696 + {record.paths?.includes('URGENT_INVOICE_AUDITING') ? (
2697 2697 <Button
2698 2698 className="p-0"
2699 2699 type="link"
... ... @@ -2708,7 +2708,7 @@ const OrderPage = () =&gt; {
2708 2708 ) : (
2709 2709 ''
2710 2710 )}
2711   - {record.mainPath?.includes('URGENT_INVOICE_AUDITING_old') ? (
  2711 + {record.paths?.includes('URGENT_INVOICE_AUDITING_old') ? (
2712 2712 <Button
2713 2713 className="p-0"
2714 2714 type="link"
... ... @@ -2725,7 +2725,7 @@ const OrderPage = () =&gt; {
2725 2725 ) : (
2726 2726 ''
2727 2727 )}
2728   - {record.mainPath?.includes('salesConfirm') && (
  2728 + {record.paths?.includes('salesConfirm') && (
2729 2729 <ButtonConfirm
2730 2730 className="p-0"
2731 2731 title="是否确认此商城订单信息无误?确认无误之后订单将进入审核流程。"
... ... @@ -2756,7 +2756,7 @@ const OrderPage = () =&gt; {
2756 2756 }}
2757 2757 />
2758 2758 )}
2759   - {record.mainPath?.includes('uploadPaymentReceiptBill') ? (
  2759 + {record.paths?.includes('uploadPaymentReceiptBill') ? (
2760 2760 <Button
2761 2761 className="p-0"
2762 2762 type="link"
... ... @@ -2771,7 +2771,7 @@ const OrderPage = () =&gt; {
2771 2771 ''
2772 2772 )}
2773 2773  
2774   - {record.mainPath?.includes('modifiedAuditRequest') ? (
  2774 + {record.paths?.includes('modifiedAuditRequest') ? (
2775 2775 <Button
2776 2776 className="p-0"
2777 2777 type="link"
... ... @@ -2787,7 +2787,7 @@ const OrderPage = () =&gt; {
2787 2787 ''
2788 2788 )}
2789 2789  
2790   - {record.mainPath?.includes('auditPaymentReceipt') ? (
  2790 + {record.paths?.includes('auditPaymentReceipt') ? (
2791 2791 <Button
2792 2792 className="p-0"
2793 2793 type="link"
... ... @@ -2803,7 +2803,7 @@ const OrderPage = () =&gt; {
2803 2803 ''
2804 2804 )}
2805 2805  
2806   - {record.mainPath?.includes('modifiedLeaderAuditRequest') ? (
  2806 + {record.paths?.includes('modifiedLeaderAuditRequest') ? (
2807 2807 <Button
2808 2808 className="p-0"
2809 2809 type="link"
... ... @@ -2835,7 +2835,7 @@ const OrderPage = () =&gt; {
2835 2835 ''
2836 2836 )}
2837 2837  
2838   - {record.mainPath?.includes('reissue_old') ? (
  2838 + {record.paths?.includes('reissue_old') ? (
2839 2839 /*optRecord.afterInvoicingStatus==='PARTIAL_INVOICING'||
2840 2840 optRecord.afterInvoicingStatus==='COMPLETE_INVOICING'*/
2841 2841 <Button
... ... @@ -2853,7 +2853,7 @@ const OrderPage = () =&gt; {
2853 2853 ''
2854 2854 )}
2855 2855  
2856   - {record.mainPath?.includes('confirmReissue_old') ? (
  2856 + {record.paths?.includes('confirmReissue_old') ? (
2857 2857 <Button
2858 2858 className="p-0"
2859 2859 type="link"
... ... @@ -2870,7 +2870,7 @@ const OrderPage = () =&gt; {
2870 2870 ''
2871 2871 )}
2872 2872  
2873   - {record.mainPath?.includes('reissue') ? (
  2873 + {record.paths?.includes('reissue') ? (
2874 2874 /*optRecord.afterInvoicingStatus==='PARTIAL_INVOICING'||
2875 2875 optRecord.afterInvoicingStatus==='COMPLETE_INVOICING'*/
2876 2876 <Button
... ... @@ -2887,7 +2887,7 @@ const OrderPage = () =&gt; {
2887 2887 ''
2888 2888 )}
2889 2889  
2890   - {record.mainPath?.includes('confirmReissue') ? (
  2890 + {record.paths?.includes('confirmReissue') ? (
2891 2891 <Button
2892 2892 className="p-0"
2893 2893 type="link"
... ... @@ -2904,7 +2904,7 @@ const OrderPage = () =&gt; {
2904 2904 ''
2905 2905 )}
2906 2906  
2907   - {record.mainPath?.includes('procureOrder') ? (
  2907 + {record.paths?.includes('procureOrder') ? (
2908 2908 <ButtonConfirm
2909 2909 className="p-0"
2910 2910 title="是否下单?"
... ... @@ -2936,7 +2936,7 @@ const OrderPage = () =&gt; {
2936 2936 ''
2937 2937 )}
2938 2938  
2939   - {record.mainPath?.includes('cancelSend') ? (
  2939 + {record.paths?.includes('cancelSend') ? (
2940 2940 <ButtonConfirm
2941 2941 className="p-0"
2942 2942 title="是否取消发货?"
... ... @@ -2968,7 +2968,7 @@ const OrderPage = () =&gt; {
2968 2968 ''
2969 2969 )}
2970 2970  
2971   - {record.mainPath?.includes('applyModify') ? (
  2971 + {record.paths?.includes('applyModify') ? (
2972 2972 <Button
2973 2973 className="p-0"
2974 2974 type="link"
... ... @@ -2984,7 +2984,7 @@ const OrderPage = () =&gt; {
2984 2984 ''
2985 2985 )}
2986 2986  
2987   - {record.mainPath?.includes('leaderAudit') ? (
  2987 + {record.paths?.includes('leaderAudit') ? (
2988 2988 <Button
2989 2989 className="p-0"
2990 2990 type="link"
... ... @@ -3016,7 +3016,7 @@ const OrderPage = () =&gt; {
3016 3016 ''
3017 3017 )}
3018 3018  
3019   - {record.mainPath?.includes('changeOrderAudit') ? (
  3019 + {record.paths?.includes('changeOrderAudit') ? (
3020 3020 <Button
3021 3021 className="p-0"
3022 3022 type="link"
... ... @@ -3050,7 +3050,7 @@ const OrderPage = () =&gt; {
3050 3050 ''
3051 3051 )}
3052 3052  
3053   - {record.mainPath?.includes('creditAudit') ? (
  3053 + {record.paths?.includes('creditAudit') ? (
3054 3054 <Button
3055 3055 className="p-0"
3056 3056 type="link"
... ... @@ -3082,7 +3082,7 @@ const OrderPage = () =&gt; {
3082 3082 ''
3083 3083 )}
3084 3084  
3085   - {record.mainPath?.includes('editProductionTime') ? (
  3085 + {record.paths?.includes('editProductionTime') ? (
3086 3086 <Button
3087 3087 className="p-0"
3088 3088 type="link"
... ... @@ -3097,7 +3097,7 @@ const OrderPage = () =&gt; {
3097 3097 ''
3098 3098 )}
3099 3099  
3100   - {record.mainPath?.includes('procureConvertProcure') ? (
  3100 + {record.paths?.includes('procureConvertProcure') ? (
3101 3101 <Button
3102 3102 className="p-0"
3103 3103 type="link"
... ... @@ -3111,7 +3111,7 @@ const OrderPage = () =&gt; {
3111 3111  
3112 3112 for (let i = 0; i < selectedSubOrders.length; i++) {
3113 3113 if (
3114   - !selectedSubOrders[i].subPath.includes(
  3114 + !selectedSubOrders[i].paths.includes(
3115 3115 'procureConvertProcure',
3116 3116 )
3117 3117 ) {
... ... @@ -3129,7 +3129,7 @@ const OrderPage = () =&gt; {
3129 3129 ) : (
3130 3130 ''
3131 3131 )}
3132   - {record.mainPath?.includes('sendProduct') ? (
  3132 + {record.paths?.includes('sendProduct') ? (
3133 3133 <Button
3134 3134 className="p-0"
3135 3135 type="link"
... ... @@ -3150,7 +3150,7 @@ const OrderPage = () =&gt; {
3150 3150 )}
3151 3151  
3152 3152 {/* 供应商发货 */}
3153   - {record.mainPath?.includes('supplierSendOrder') ? (
  3153 + {record.paths?.includes('supplierSendOrder') ? (
3154 3154 <Button
3155 3155 className="p-0"
3156 3156 type="link"
... ... @@ -3170,7 +3170,7 @@ const OrderPage = () =&gt; {
3170 3170 ''
3171 3171 )}
3172 3172  
3173   - {record.mainPath?.includes('procureSend') ? (
  3173 + {record.paths?.includes('procureSend') ? (
3174 3174 <Button
3175 3175 className="p-0"
3176 3176 type="link"
... ... @@ -3190,7 +3190,7 @@ const OrderPage = () =&gt; {
3190 3190 ''
3191 3191 )}
3192 3192  
3193   - {record.mainPath?.includes('printOrder') ? (
  3193 + {record.paths?.includes('printOrder') ? (
3194 3194 <Button
3195 3195 className="p-0"
3196 3196 type="link"
... ... @@ -3203,8 +3203,8 @@ const OrderPage = () =&gt; {
3203 3203 }
3204 3204  
3205 3205 for (let subOrderRecord of selectedSubOrders) {
3206   - let subPath = subOrderRecord.subPath;
3207   - if (!checkePrintable(subPath)) {
  3206 + let paths = subOrderRecord.paths;
  3207 + if (!checkePrintable(paths)) {
3208 3208 return message.error('请选择可以打印的子订单');
3209 3209 }
3210 3210 }
... ... @@ -3219,7 +3219,7 @@ const OrderPage = () =&gt; {
3219 3219 ''
3220 3220 )}
3221 3221  
3222   - {record.mainPath?.includes('supplierPrint') ? (
  3222 + {record.paths?.includes('supplierPrint') ? (
3223 3223 <Button
3224 3224 className="p-0"
3225 3225 type="link"
... ... @@ -3239,7 +3239,7 @@ const OrderPage = () =&gt; {
3239 3239 ''
3240 3240 )}
3241 3241  
3242   - {record.mainPath?.includes('rePrintOrder') ? (
  3242 + {record.paths?.includes('rePrintOrder') ? (
3243 3243 <Button
3244 3244 className="p-0"
3245 3245 type="link"
... ... @@ -3257,7 +3257,7 @@ const OrderPage = () =&gt; {
3257 3257 ) : (
3258 3258 ''
3259 3259 )}
3260   - {record.mainPath?.includes('confirmReceipt') ? (
  3260 + {record.paths?.includes('confirmReceipt') ? (
3261 3261 <Button
3262 3262 className="p-0"
3263 3263 type="link"
... ... @@ -3271,7 +3271,7 @@ const OrderPage = () =&gt; {
3271 3271 ) : (
3272 3272 ''
3273 3273 )}
3274   - {record.mainPath?.includes('modifySendInformation') ? (
  3274 + {record.paths?.includes('modifySendInformation') ? (
3275 3275 <Button
3276 3276 className="p-0"
3277 3277 type="link"
... ... @@ -3301,7 +3301,7 @@ const OrderPage = () =&gt; {
3301 3301 ) : (
3302 3302 ''
3303 3303 )}
3304   - {record.mainPath?.includes('invoicing') ? (
  3304 + {record.paths?.includes('invoicing') ? (
3305 3305 <Button
3306 3306 type="link"
3307 3307 className="p-0"
... ... @@ -3317,7 +3317,7 @@ const OrderPage = () =&gt; {
3317 3317 ''
3318 3318 )}
3319 3319  
3320   - {record.mainPath?.includes('applyInvoicing_old') ? (
  3320 + {record.paths?.includes('applyInvoicing_old') ? (
3321 3321 <Button
3322 3322 type="link"
3323 3323 className="p-0"
... ... @@ -3354,7 +3354,7 @@ const OrderPage = () =&gt; {
3354 3354 ''
3355 3355 )}
3356 3356  
3357   - {record.mainPath?.includes('applyInvoicing') ? (
  3357 + {record.paths?.includes('applyInvoicing') ? (
3358 3358 <Button
3359 3359 type="link"
3360 3360 className="p-0"
... ... @@ -3391,7 +3391,7 @@ const OrderPage = () =&gt; {
3391 3391 ''
3392 3392 )}
3393 3393  
3394   - {record.mainPath?.includes('updateOrder') ? (
  3394 + {record.paths?.includes('updateOrder') ? (
3395 3395 <Button
3396 3396 className="p-0"
3397 3397 type="link"
... ... @@ -3456,7 +3456,7 @@ const OrderPage = () =&gt; {
3456 3456 ''
3457 3457 )}
3458 3458  
3459   - {record?.subOrderInformationLists[0].subPath?.includes(
  3459 + {record?.subOrderInformationLists[0].paths?.includes(
3460 3460 'noNeedInvoicingEdit',
3461 3461 ) ? (
3462 3462 <Button
... ... @@ -3474,7 +3474,7 @@ const OrderPage = () =&gt; {
3474 3474 ''
3475 3475 )}
3476 3476  
3477   - {record.mainPath?.includes('checkOrder') ? (
  3477 + {record.paths?.includes('checkOrder') ? (
3478 3478 <Button
3479 3479 className="p-0"
3480 3480 type="link"
... ... @@ -3511,7 +3511,7 @@ const OrderPage = () =&gt; {
3511 3511 ''
3512 3512 )}
3513 3513  
3514   - {record.mainPath?.includes('afterSalesCheck') ? (
  3514 + {record.paths?.includes('afterSalesCheck') ? (
3515 3515 <Button
3516 3516 className="p-0"
3517 3517 type="link"
... ... @@ -3544,7 +3544,7 @@ const OrderPage = () =&gt; {
3544 3544 ''
3545 3545 )}
3546 3546  
3547   - {record.mainPath?.includes('noNeedSend') ? (
  3547 + {record.paths?.includes('noNeedSend') ? (
3548 3548 <ButtonConfirm
3549 3549 className="p-0"
3550 3550 title="此订单是否无需发货?"
... ... @@ -3594,7 +3594,7 @@ const OrderPage = () =&gt; {
3594 3594 ''
3595 3595 )}
3596 3596  
3597   - {record.mainPath?.includes('saleCancelInvoicing_old') ? (
  3597 + {record.paths?.includes('saleCancelInvoicing_old') ? (
3598 3598 <ButtonConfirm
3599 3599 className="p-0"
3600 3600 title="确认取消申请开票?"
... ... @@ -3637,7 +3637,7 @@ const OrderPage = () =&gt; {
3637 3637 ''
3638 3638 )}
3639 3639 {/* 财务审核:主订单暂无 */}
3640   - {record.mainPath?.includes('financeCheckOrder') ? (
  3640 + {record.paths?.includes('financeCheckOrder') ? (
3641 3641 <Button
3642 3642 className="p-0"
3643 3643 type="link"
... ... @@ -3675,7 +3675,7 @@ const OrderPage = () =&gt; {
3675 3675 )}
3676 3676  
3677 3677 {/* 采购审核 */}
3678   - {record.mainPath?.includes('procureCheckOrder') ? (
  3678 + {record.paths?.includes('procureCheckOrder') ? (
3679 3679 <Button
3680 3680 className="p-0"
3681 3681 type="link"
... ... @@ -3708,7 +3708,7 @@ const OrderPage = () =&gt; {
3708 3708 ''
3709 3709 )}
3710 3710  
3711   - {record.mainPath?.includes('applyAfterSales') ? (
  3711 + {record.paths?.includes('applyAfterSales') ? (
3712 3712 <Button
3713 3713 className="p-0"
3714 3714 type="link"
... ... @@ -3743,7 +3743,7 @@ const OrderPage = () =&gt; {
3743 3743 ''
3744 3744 )}
3745 3745  
3746   - {/* {record.mainPath?.includes('afterSalesCompletion') ? (
  3746 + {/* {record.paths?.includes('afterSalesCompletion') ? (
3747 3747 <ButtonConfirm
3748 3748 className="p-0"
3749 3749 title="售后是否已完成?"
... ... @@ -3787,7 +3787,7 @@ const OrderPage = () =&gt; {
3787 3787 ''
3788 3788 )} */}
3789 3789  
3790   - {record.mainPath?.includes('salOrderSave') ? (
  3790 + {record.paths?.includes('salOrderSave') ? (
3791 3791 <ButtonConfirm
3792 3792 className="p-0"
3793 3793 title="是否推送至金蝶ERP?"
... ... @@ -3809,7 +3809,7 @@ const OrderPage = () =&gt; {
3809 3809 ''
3810 3810 )}
3811 3811  
3812   - {record.mainPath?.includes('salBillOutbound') ? (
  3812 + {record.paths?.includes('salBillOutbound') ? (
3813 3813 <ButtonConfirm
3814 3814 className="p-0"
3815 3815 title="是否下推金蝶ERP出库单?"
... ... @@ -3831,7 +3831,7 @@ const OrderPage = () =&gt; {
3831 3831 ''
3832 3832 )}
3833 3833  
3834   - {record.mainPath?.includes('orderCancel') ? (
  3834 + {record.paths?.includes('orderCancel') ? (
3835 3835 <ButtonConfirm
3836 3836 className="p-0"
3837 3837 title="确认作废?"
... ... @@ -3854,7 +3854,7 @@ const OrderPage = () =&gt; {
3854 3854 ''
3855 3855 )}
3856 3856  
3857   - {record.mainPath?.includes('procurePrint') ? (
  3857 + {record.paths?.includes('procurePrint') ? (
3858 3858 <ButtonConfirm
3859 3859 className="p-0"
3860 3860 title="确认打印?"
... ... @@ -4205,6 +4205,7 @@ const OrderPage = () =&gt; {
4205 4205 {
4206 4206 label: '加急开票审核(旧)',
4207 4207 key: '2',
  4208 + disabled: true,
4208 4209 onClick: async () => {
4209 4210 setIsMainOrder(true);
4210 4211 setCheckVisible(true);
... ... @@ -4313,7 +4314,7 @@ const OrderPage = () =&gt; {
4313 4314 setIsMainOrder(true);
4314 4315 setApplyForInvoicingVisible(true);
4315 4316 }}
4316   - disabled={selectedSubOrderKeys?.length === 0}
  4317 + disabled={true} /*{selectedSubOrderKeys?.length === 0}*/
4317 4318 >
4318 4319 {roleCode === 'admin' ? '合并(销售)' : '合并开票'}
4319 4320 </Button>,
... ...
src/pages/Order/type.d.ts
... ... @@ -19,7 +19,7 @@ export interface OrderListItemType {
19 19 goodsWeight: any;
20 20 receivingCompany: any;
21 21 modified: any;
22   - mainPath: any;
  22 + paths: any;
23 23 totalPayment: ReactNode;
24 24 notes: ReactNode;
25 25 invoiceIdentificationNumber: ReactNode;
... ...
src/pages/User/ZoNing/components/constant.tsx deleted 100644 → 0
1   -import { List } from 'lodash';
2   -
3   -export type zoningItem = {
4   - id?: number; //id
5   - zoning: string; //区域名称
6   - orderProvinceVoList: List<provinceItem>; //所包含的省份列表
7   - orderUserVoList: List<userItem>; //所包含的销售列表
8   -};
9   -
10   -export type zoningShowItem = {
11   - id?: number; //id
12   - zoning: string; //区域名称
13   - orderProvinceShowList: string; //所包含的省份列表
14   - orderUserShowList: string; //所包含的销售列表
15   - orderUserNumberShowList: number[]; //销售对应的uId
16   -};
17   -
18   -export type provinceItem = {
19   - pId?: number;
20   - province: string;
21   -};
22   -
23   -export type userItem = {
24   - uId: number;
25   - userName?: string;
26   -};
27   -
28   -export const provinceEnum = {
29   - 全选: '全选',
30   - 北京市: '北京市',
31   - 天津市: '天津市',
32   - 河北省: '河北省',
33   - 山西省: '山西省',
34   - 内蒙古自治区: '内蒙古自治区',
35   - 辽宁省: '辽宁省',
36   - 吉林省: '吉林省',
37   - 黑龙江省: '黑龙江省',
38   - 上海市: '上海市',
39   - 江苏省: '江苏省',
40   - 浙江省: '浙江省',
41   - 安徽省: '安徽省',
42   - 福建省: '福建省',
43   - 江西省: '江西省',
44   - 山东省: '山东省',
45   - 河南省: '河南省',
46   - 湖北省: '湖北省',
47   - 湖南省: '湖南省',
48   - 广东省: '广东省',
49   - 广西壮族自治区: '广西壮族自治区',
50   - 海南省: '海南省',
51   - 重庆市: '重庆市',
52   - 四川省: '四川省',
53   - 贵州省: '贵州省',
54   - 云南省: '云南省',
55   - 西藏自治区: '西藏自治区',
56   - 陕西省: '陕西省',
57   - 甘肃省: '甘肃省',
58   - 青海省: '青海省',
59   - 宁夏回族自治区: '宁夏回族自治区',
60   - 新疆维吾尔自治区: '新疆维吾尔自治区',
61   - 台湾省: '台湾省',
62   - 香港特别行政区: '香港特别行政区',
63   - 澳门特别行政区: '澳门特别行政区',
64   -};
src/pages/User/ZoNing/components/modal.tsx deleted 100644 → 0
1   -import {
2   - getOrderErpOrderZoNingSelectUserAll,
3   - postOrderErpOrderZoNingSaveOrUpdate,
4   -} from '@/services';
5   -import { PlusOutlined } from '@ant-design/icons';
6   -import {
7   - ModalForm,
8   - ProForm,
9   - ProFormSelect,
10   - ProFormText,
11   -} from '@ant-design/pro-components';
12   -import { Button, Form, message } from 'antd';
13   -import { provinceEnum, zoningItem } from './constant';
14   -const waitTime = (time: number = 100) => {
15   - return new Promise((resolve) => {
16   - setTimeout(() => {
17   - resolve(true);
18   - }, time);
19   - });
20   -};
21   -
22   -export default ({ toReload, option, needEditBody }) => {
23   - const [form] = Form.useForm<zoningItem>();
24   -
25   - return (
26   - <ModalForm<{
27   - zoning: string;
28   - province: string[];
29   - user: number[];
30   - }>
31   - title={option}
32   - trigger={
33   - <Button type="primary" key={option.id}>
34   - {option !== '编辑' && <PlusOutlined />}
35   - {option}
36   - </Button>
37   - }
38   - form={form}
39   - autoFocusFirstInput
40   - initialValues={{
41   - zoning: needEditBody.zoning ? needEditBody.zoning : '',
42   - province: needEditBody.orderProvinceShowList
43   - ? needEditBody.orderProvinceShowList.split('、')
44   - : [],
45   - user: needEditBody.orderUserNumberShowList
46   - ? needEditBody.orderUserNumberShowList
47   - : [],
48   - }}
49   - modalProps={{
50   - destroyOnClose: true,
51   - }}
52   - submitTimeout={500}
53   - onFinish={async (values) => {
54   - console.log(values);
55   - const orderProvinceList = values.province.map((item) => {
56   - return { province: item };
57   - });
58   - const orderUserList = values.user.map((item) => {
59   - return { uId: item };
60   - });
61   - const fetchData: zoningItem = {
62   - zoning: values.zoning,
63   - orderProvinceVoList: orderProvinceList,
64   - orderUserVoList: orderUserList,
65   - };
66   - let res = await postOrderErpOrderZoNingSaveOrUpdate({
67   - data: fetchData,
68   - });
69   - if (res) {
70   - console.log(res);
71   - await waitTime(500);
72   - console.log(values);
73   - message.success('提交成功');
74   - toReload();
75   - return true;
76   - }
77   - return false;
78   - }}
79   - >
80   - <ProForm.Group>
81   - <ProFormText
82   - width="lg"
83   - name="zoning"
84   - label="区域名称"
85   - placeholder="请输入"
86   - rules={[{ required: true, message: '此项为必填项' }]}
87   - />
88   - </ProForm.Group>
89   - <ProForm.Group>
90   - <ProFormSelect
91   - name="user"
92   - width="lg"
93   - label="负责销售"
94   - request={async () => {
95   - const userList = await getOrderErpOrderZoNingSelectUserAll();
96   - if (userList) {
97   - let userSelList = [];
98   - userList.data.forEach((item: { uId: any; userName: any }) =>
99   - userSelList.push({
100   - value: item.uId,
101   - label: item.userName,
102   - }),
103   - );
104   - userSelList.unshift({
105   - value: 0,
106   - label: '全选',
107   - });
108   - return userSelList;
109   - }
110   - return [];
111   - }}
112   - fieldProps={{
113   - mode: 'multiple',
114   - }}
115   - placeholder="请选择"
116   - rules={[
117   - {
118   - required: true,
119   - message: '请选择!',
120   - type: 'array',
121   - },
122   - ]}
123   - />
124   - </ProForm.Group>
125   - <ProForm.Group>
126   - <ProFormSelect
127   - name="province"
128   - width="lg"
129   - label="管辖地区"
130   - valueEnum={provinceEnum}
131   - fieldProps={{
132   - mode: 'multiple',
133   - }}
134   - placeholder="请选择"
135   - rules={[
136   - {
137   - required: true,
138   - message: '请选择!',
139   - type: 'array',
140   - },
141   - ]}
142   - />
143   - </ProForm.Group>
144   - </ModalForm>
145   - );
146   -};
src/pages/User/ZoNing/components/table.tsx deleted 100644 → 0
1   -import {
2   - deleteOrderErpOrderZoNingDelete,
3   - getOrderErpOrderZoNingSelectAll,
4   -} from '@/services';
5   -import type { ProColumns } from '@ant-design/pro-components';
6   -import { EditableProTable } from '@ant-design/pro-components';
7   -import { Button, Popconfirm, PopconfirmProps, message } from 'antd';
8   -import React, { useRef, useState } from 'react';
9   -import '../index.less';
10   -import { zoningItem, zoningShowItem } from './constant';
11   -import Modal from './modal';
12   -
13   -const waitTime = (time: number = 100) => {
14   - return new Promise((resolve) => {
15   - setTimeout(() => {
16   - resolve(true);
17   - }, time);
18   - });
19   -};
20   -
21   -function changeToShow(array: zoningItem[]) {
22   - console.log(JSON.parse(localStorage.getItem('userInfo')).username);
23   - const showArray: zoningShowItem[] = array.map((item) => {
24   - let orderProvinceShowList = '';
25   - let orderUserShowList = '';
26   - let orderUserNumberShowList: number[] = [];
27   - item.orderProvinceVoList.forEach((element, index) => {
28   - orderProvinceShowList += element.province;
29   - if (index < item.orderProvinceVoList.length - 1) {
30   - orderProvinceShowList += '、';
31   - }
32   - });
33   -
34   - item.orderUserVoList.forEach((event, index) => {
35   - orderUserShowList += event.userName;
36   - orderUserNumberShowList.push(event.uId);
37   - if (index < item.orderUserVoList.length - 1) {
38   - orderUserShowList += '、';
39   - }
40   - });
41   -
42   - if (orderUserShowList === '') {
43   - orderUserShowList = '全选';
44   - orderUserNumberShowList.push(0);
45   - }
46   -
47   - return {
48   - id: item.id,
49   - zoning: item.zoning,
50   - orderProvinceShowList,
51   - orderUserShowList,
52   - orderUserNumberShowList,
53   - };
54   - });
55   - return showArray;
56   -}
57   -
58   -export default () => {
59   - const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
60   - const [dataSource, setDataSource] = useState<readonly zoningItem[]>([]);
61   - const [position] = useState<'top' | 'bottom' | 'hidden'>('hidden');
62   -
63   - interface ActionType {
64   - reload: (resetPageIndex?: boolean) => void;
65   - reloadAndRest: () => void;
66   - reset: () => void;
67   - clearSelected?: () => void;
68   - startEditable: (rowKey: Key) => boolean;
69   - cancelEditable: (rowKey: Key) => boolean;
70   - }
71   -
72   - const ref = useRef<ActionType>({
73   - reload: () => {},
74   - reloadAndRest: () => {},
75   - reset: () => {},
76   - startEditable: () => {},
77   - cancelEditable: () => {},
78   - });
79   -
80   - function reload() {
81   - ref.current.reload();
82   - }
83   -
84   - const confirm: PopconfirmProps['onConfirm'] = async (id) => {
85   - await deleteOrderErpOrderZoNingDelete({
86   - data: id,
87   - });
88   - reload();
89   - message.success('删除成功');
90   - };
91   -
92   - const cancel: PopconfirmProps['onCancel'] = () => {
93   - message.error('取消删除');
94   - };
95   -
96   - const columns: ProColumns<zoningItem>[] = [
97   - {
98   - title: '区域名称',
99   - dataIndex: 'zoning',
100   - width: 200,
101   - },
102   - {
103   - title: '管辖省份',
104   - dataIndex: 'orderProvinceShowList',
105   - readonly: true,
106   - width: 600,
107   - },
108   - {
109   - title: '负责销售',
110   - key: 'state',
111   - dataIndex: 'orderUserShowList',
112   - valueType: 'select',
113   - width: 200,
114   - },
115   - {
116   - title: '操作',
117   - valueType: 'option',
118   - width: 200,
119   - render: (text, record) => [
120   - <>
121   - <Modal
122   - toReload={reload}
123   - option={'编辑'}
124   - needEditBody={record}
125   - key={record.id}
126   - />
127   - <Popconfirm
128   - title="删除此项"
129   - description="你确定你要删除此项吗?"
130   - onConfirm={() => {
131   - confirm(record.id);
132   - }}
133   - onCancel={cancel}
134   - okText="确定"
135   - cancelText="取消"
136   - >
137   - <Button>删除</Button>
138   - </Popconfirm>
139   - </>,
140   - ],
141   - },
142   - ];
143   -
144   - return (
145   - <EditableProTable<zoningItem>
146   - rowKey="id"
147   - className="table-index"
148   - deletePopconfirmMessage
149   - actionRef={ref}
150   - headerTitle={
151   - <Modal toReload={reload} option={'新增区域'} needEditBody={{}}></Modal>
152   - }
153   - maxLength={5}
154   - scroll={{
155   - x: 960,
156   - }}
157   - recordCreatorProps={
158   - position !== 'hidden'
159   - ? {
160   - position: position as 'top',
161   - record: () => ({ id: (Math.random() * 1000000).toFixed(0) }),
162   - }
163   - : false
164   - }
165   - loading={false}
166   - columns={columns}
167   - request={async () => {
168   - const res = await getOrderErpOrderZoNingSelectAll();
169   - if (res) {
170   - const initDataSource = changeToShow(res.data);
171   - return { data: initDataSource || [] };
172   - }
173   - }}
174   - value={dataSource}
175   - onChange={setDataSource}
176   - editable={{
177   - type: 'multiple',
178   - editableKeys,
179   - onSave: async (rowKey, data, row) => {
180   - console.log(rowKey, data, row);
181   - await waitTime(2000);
182   - },
183   - onChange: setEditableRowKeys,
184   - }}
185   - />
186   - );
187   -};
src/pages/User/ZoNing/index.tsx deleted 100644 → 0
1   -import Table from './components/table';
2   -const instalment_contect: React.FC = () => (
3   - <>
4   - <Table></Table>
5   - </>
6   -);
7   -
8   -export default instalment_contect;
src/services/definition.ts
... ... @@ -221,8 +221,9 @@ export interface AdminDeptVO {
221 221 pid?: number;
222 222 }
223 223  
224   -export interface AdminInvoicingAccountDto {
  224 +export interface AdminInvoicingAccountDTO {
225 225 account?: string;
  226 + accountText?: string;
226 227 createByName?: string;
227 228 /** @format date-time */
228 229 createTime?: string;
... ... @@ -230,6 +231,7 @@ export interface AdminInvoicingAccountDto {
230 231 id?: number;
231 232 logicDelete?: boolean;
232 233 password?: string;
  234 + paths?: Array<string>;
233 235 updateByName?: string;
234 236 /** @format date-time */
235 237 updateTime?: string;
... ... @@ -698,7 +700,7 @@ export interface ApiQueryOrderStatusCountsRequest {
698 700 uid?: number;
699 701 }
700 702  
701   -export interface ApplyInvoiceDto {
  703 +export interface ApplyInvoiceDTO {
702 704 /**
703 705 * @description
704 706 * 备注
... ... @@ -749,6 +751,9 @@ export interface ApplyInvoiceDto {
749 751 * 发票号码
750 752 */
751 753 invoiceNumber?: string;
  754 + invoicingAccount?: string;
  755 + /** @format date */
  756 + invoicingDate?: string;
752 757 /**
753 758 * @description
754 759 * 开票人
... ... @@ -770,8 +775,6 @@ export interface ApplyInvoiceDto {
770 775 * 开具类型
771 776 */
772 777 invoicingTypeText?: string;
773   - /** @format date */
774   - invoicingdate?: string;
775 778 /**
776 779 * @description
777 780 * 是否加急
... ... @@ -1437,7 +1440,7 @@ export interface InvoiceDto {
1437 1440 subOrderIds?: Array<number>;
1438 1441 }
1439 1442  
1440   -export interface InvoiceRecordDto {
  1443 +export interface InvoiceRecordDTO {
1441 1444 applyInvoicingNotes?: string;
1442 1445 /**
1443 1446 * @description
... ... @@ -1484,6 +1487,9 @@ export interface InvoiceRecordDto {
1484 1487 * 发票号码
1485 1488 */
1486 1489 invoiceNumber?: string;
  1490 + invoicingAccount?: string;
  1491 + /** @format date */
  1492 + invoicingDate?: string;
1487 1493 /**
1488 1494 * @description
1489 1495 * 开票人
... ... @@ -1505,8 +1511,6 @@ export interface InvoiceRecordDto {
1505 1511 * 开具类型
1506 1512 */
1507 1513 invoicingTypeText?: string;
1508   - /** @format date */
1509   - invoicingdate?: string;
1510 1514 /**
1511 1515 * @description
1512 1516 * 是否加急
... ... @@ -1695,6 +1699,18 @@ export interface InvoiceRecordQueryRequest {
1695 1699 /**
1696 1700 * @description
1697 1701 * 开票时间
  1702 + * @format date
  1703 + */
  1704 + invoicingDateGe?: string;
  1705 + /**
  1706 + * @description
  1707 + * 开票时间
  1708 + * @format date
  1709 + */
  1710 + invoicingDateLe?: string;
  1711 + /**
  1712 + * @description
  1713 + * 开票时间
1698 1714 * @format date-time
1699 1715 */
1700 1716 invoicingTimeGe?: string;
... ... @@ -2589,6 +2605,7 @@ export interface QueryClientDto {
2589 2605 companyAddressLike?: string;
2590 2606 companyIds?: Array<number>;
2591 2607 companyNameLike?: string;
  2608 + createByUserIdIn?: Array<number>;
2592 2609 /** @format date-time */
2593 2610 createTimeGe?: string;
2594 2611 /** @format date-time */
... ... @@ -2597,6 +2614,7 @@ export interface QueryClientDto {
2597 2614 current?: number;
2598 2615 /** @format int32 */
2599 2616 end?: number;
  2617 + groupFilter?: string;
2600 2618 hasScheme?: boolean;
2601 2619 level?: string;
2602 2620 namelike?: string;
... ... @@ -2728,6 +2746,18 @@ export interface QueryInvoiceRecordDto {
2728 2746 /**
2729 2747 * @description
2730 2748 * 开票时间
  2749 + * @format date
  2750 + */
  2751 + invoicingDateGe?: string;
  2752 + /**
  2753 + * @description
  2754 + * 开票时间
  2755 + * @format date
  2756 + */
  2757 + invoicingDateLe?: string;
  2758 + /**
  2759 + * @description
  2760 + * 开票时间
2731 2761 * @format date-time
2732 2762 */
2733 2763 invoicingTimeGe?: string;
... ... @@ -2908,75 +2938,53 @@ export interface ReissueInvoiceDto {
2908 2938 purchaser?: string;
2909 2939 }
2910 2940  
2911   -export interface ResearchGroupAccountAddRequest {
2912   - /**
2913   - * @description
2914   - * 关联的账号id
2915   - * @format int64
2916   - */
2917   - accountId?: number;
2918   - /**
2919   - * @description
2920   - * 关联的账号名称
2921   - */
2922   - accountName?: string;
  2941 +export interface ResearchGroupAddRequest {
  2942 + accounts?: Array<ResearchGroupAccounts>;
2923 2943 /**
2924 2944 * @description
2925   - * 关联的账号手机号
  2945 + * 单位名称
2926 2946 */
2927   - accountPhone?: string;
  2947 + companyName?: string;
  2948 + createByName?: string;
  2949 + /** @format date-time */
  2950 + createTime?: string;
2928 2951 /**
2929 2952 * @description
2930   - * 课题组id
2931   - * @format int64
  2953 + * 课题组名称
2932 2954 */
2933   - groupId?: number;
2934   -}
2935   -
2936   -export interface ResearchGroupAccountEditRequest {
  2955 + groupName?: string;
2937 2956 /**
2938 2957 * @description
2939   - * 关联的账号id
  2958 + * 主键id
2940 2959 * @format int64
2941 2960 */
2942   - accountId?: number;
2943   - /**
2944   - * @description
2945   - * 关联的账号名称
2946   - */
2947   - accountName?: string;
2948   - /**
2949   - * @description
2950   - * 关联的账号手机号
2951   - */
2952   - accountPhone?: string;
  2961 + id?: number;
2953 2962 /**
2954 2963 * @description
2955   - * 课题组id
2956   - * @format int64
  2964 + * 负责人
2957 2965 */
2958   - groupId?: number;
  2966 + leaderName?: string;
  2967 + logicDelete?: boolean;
  2968 + members?: Array<ResearchGroupMembers>;
  2969 + paths?: Array<string>;
2959 2970 /**
2960 2971 * @description
2961   - * 主键id
2962   - * @format int64
  2972 + * 状态
2963 2973 */
2964   - id?: number;
2965   -}
2966   -
2967   -export interface ResearchGroupAddRequest {
2968   - accounts?: Array<ResearchGroupAccountAddRequest>;
  2974 + status?: string;
2969 2975 /**
2970 2976 * @description
2971   - * 课题组名称
  2977 + * 冗余字段,当前状态备注
2972 2978 */
2973   - group?: string;
  2979 + statusNotes?: string;
2974 2980 /**
2975 2981 * @description
2976   - * 课题组负责人
  2982 + * 状态文本
2977 2983 */
2978   - leader?: string;
2979   - members?: Array<ResearchGroupMemberAddRequest>;
  2984 + statusText?: string;
  2985 + updateByName?: string;
  2986 + /** @format date-time */
  2987 + updateTime?: string;
2980 2988 }
2981 2989  
2982 2990 export interface ResearchGroupDeleteRequest {
... ... @@ -2997,16 +3005,20 @@ export interface ResearchGroupDetailRequest {
2997 3005 }
2998 3006  
2999 3007 export interface ResearchGroupEditRequest {
  3008 + accounts?: Array<ResearchGroupAccounts>;
3000 3009 /**
3001 3010 * @description
3002   - * 课题组预存账号
  3011 + * 单位名称
3003 3012 */
3004   - accounts?: Array<ResearchGroupAccountEditRequest>;
  3013 + companyName?: string;
  3014 + createByName?: string;
  3015 + /** @format date-time */
  3016 + createTime?: string;
3005 3017 /**
3006 3018 * @description
3007 3019 * 课题组名称
3008 3020 */
3009   - group?: string;
  3021 + groupName?: string;
3010 3022 /**
3011 3023 * @description
3012 3024 * 主键id
... ... @@ -3015,14 +3027,30 @@ export interface ResearchGroupEditRequest {
3015 3027 id?: number;
3016 3028 /**
3017 3029 * @description
3018   - * 课题组负责人
  3030 + * 负责人
3019 3031 */
3020   - leader?: string;
  3032 + leaderName?: string;
  3033 + logicDelete?: boolean;
  3034 + members?: Array<ResearchGroupMembers>;
  3035 + paths?: Array<string>;
3021 3036 /**
3022 3037 * @description
3023   - * 课题组成员集合
  3038 + * 状态
3024 3039 */
3025   - members?: Array<ResearchGroupMemberEditRequest>;
  3040 + status?: string;
  3041 + /**
  3042 + * @description
  3043 + * 冗余字段,当前状态备注
  3044 + */
  3045 + statusNotes?: string;
  3046 + /**
  3047 + * @description
  3048 + * 状态文本
  3049 + */
  3050 + statusText?: string;
  3051 + updateByName?: string;
  3052 + /** @format date-time */
  3053 + updateTime?: string;
3026 3054 }
3027 3055  
3028 3056 export interface ResearchGroupListRequest {
... ... @@ -3031,6 +3059,11 @@ export interface ResearchGroupListRequest {
3031 3059 * 预存账号手机号
3032 3060 */
3033 3061 accountPhone?: string;
  3062 + /**
  3063 + * @description
  3064 + * 公司名称
  3065 + */
  3066 + companyNameLike?: string;
3034 3067 /** @format int32 */
3035 3068 current?: number;
3036 3069 /** @format int32 */
... ... @@ -3042,6 +3075,11 @@ export interface ResearchGroupListRequest {
3042 3075 groupName?: string;
3043 3076 /**
3044 3077 * @description
  3078 + * id
  3079 + */
  3080 + idIn?: Array<number>;
  3081 + /**
  3082 + * @description
3045 3083 * 课题组负责人
3046 3084 */
3047 3085 leaderName?: string;
... ... @@ -3059,30 +3097,34 @@ export interface ResearchGroupListRequest {
3059 3097 pageSize?: number;
3060 3098 /** @format int32 */
3061 3099 start?: number;
  3100 + /**
  3101 + * @description
  3102 + * 状态
  3103 + */
  3104 + status?: string;
3062 3105 /** @format int32 */
3063 3106 total?: number;
3064 3107 }
3065 3108  
3066   -export interface ResearchGroupMemberAddRequest {
  3109 +export interface ResearchGroupMemberRequestAddRequest {
3067 3110 /**
3068 3111 * @description
3069   - * 课题组ID
3070   - * @format int64
  3112 + * 审核备注
3071 3113 */
3072   - groupId?: number;
  3114 + auditNotes?: string;
3073 3115 /**
3074 3116 * @description
3075   - * 成员名称
  3117 + * 审核状态:CREATED-未审核 AUDIT_FAIL-审核不通过 AUDIT_PASS-审核通过
3076 3118 */
3077   - memberName?: string;
  3119 + auditStatus?: string;
3078 3120 /**
3079 3121 * @description
3080   - * 成员手机号
  3122 + * 审核状态:CREATED-未审核 AUDIT_FAIL-审核不通过 AUDIT_PASS-审核通过
3081 3123 */
3082   - memberPhone?: string;
3083   -}
3084   -
3085   -export interface ResearchGroupMemberEditRequest {
  3124 + auditStatusText?: string;
  3125 + createByName?: string;
  3126 + /** @format date-time */
  3127 + createTime?: string;
3086 3128 /**
3087 3129 * @description
3088 3130 * 课题组ID
... ... @@ -3091,10 +3133,16 @@ export interface ResearchGroupMemberEditRequest {
3091 3133 groupId?: number;
3092 3134 /**
3093 3135 * @description
  3136 + * 课题组名称
  3137 + */
  3138 + groupName?: string;
  3139 + /**
  3140 + * @description
3094 3141 * 主键id
3095 3142 * @format int64
3096 3143 */
3097 3144 id?: number;
  3145 + logicDelete?: boolean;
3098 3146 /**
3099 3147 * @description
3100 3148 * 成员名称
... ... @@ -3105,26 +3153,26 @@ export interface ResearchGroupMemberEditRequest {
3105 3153 * 成员手机号
3106 3154 */
3107 3155 memberPhone?: string;
3108   -}
3109   -
3110   -export interface ResearchGroupMemberRequestAddRequest {
  3156 + members?: Array<ResearchGroupMembers>;
  3157 + paths?: Array<string>;
3111 3158 /**
3112 3159 * @description
3113   - * 课题组ID
3114   - * @format int64
  3160 + * 权限
3115 3161 */
3116   - groupId?: number;
  3162 + permissions?: Array<string>;
3117 3163 /**
3118 3164 * @description
3119   - * 课题组名称
  3165 + * 申请备注
3120 3166 */
3121   - groupName?: string;
3122   - members?: Array<ResearchGroupMemberAddRequest>;
  3167 + requestNotes?: string;
3123 3168 /**
3124 3169 * @description
3125   - * 申请备注
  3170 + * 申请类型:APPEND-新增 REMOVE-删除 MODIFY-修改
3126 3171 */
3127   - requestNotes?: string;
  3172 + requestType?: string;
  3173 + updateByName?: string;
  3174 + /** @format date-time */
  3175 + updateTime?: string;
3128 3176 }
3129 3177  
3130 3178 export interface ResearchGroupMemberRequestDeleteRequest {
... ... @@ -3147,6 +3195,24 @@ export interface ResearchGroupMemberRequestDetailRequest {
3147 3195 export interface ResearchGroupMemberRequestEditRequest {
3148 3196 /**
3149 3197 * @description
  3198 + * 审核备注
  3199 + */
  3200 + auditNotes?: string;
  3201 + /**
  3202 + * @description
  3203 + * 审核状态:CREATED-未审核 AUDIT_FAIL-审核不通过 AUDIT_PASS-审核通过
  3204 + */
  3205 + auditStatus?: string;
  3206 + /**
  3207 + * @description
  3208 + * 审核状态:CREATED-未审核 AUDIT_FAIL-审核不通过 AUDIT_PASS-审核通过
  3209 + */
  3210 + auditStatusText?: string;
  3211 + createByName?: string;
  3212 + /** @format date-time */
  3213 + createTime?: string;
  3214 + /**
  3215 + * @description
3150 3216 * 课题组ID
3151 3217 * @format int64
3152 3218 */
... ... @@ -3162,6 +3228,7 @@ export interface ResearchGroupMemberRequestEditRequest {
3162 3228 * @format int64
3163 3229 */
3164 3230 id?: number;
  3231 + logicDelete?: boolean;
3165 3232 /**
3166 3233 * @description
3167 3234 * 成员名称
... ... @@ -3172,11 +3239,25 @@ export interface ResearchGroupMemberRequestEditRequest {
3172 3239 * 成员手机号
3173 3240 */
3174 3241 memberPhone?: string;
  3242 + paths?: Array<string>;
  3243 + /**
  3244 + * @description
  3245 + * 权限
  3246 + */
  3247 + permissions?: Array<string>;
3175 3248 /**
3176 3249 * @description
3177 3250 * 申请备注
3178 3251 */
3179 3252 requestNotes?: string;
  3253 + /**
  3254 + * @description
  3255 + * 申请类型:APPEND-新增 REMOVE-删除 MODIFY-修改
  3256 + */
  3257 + requestType?: string;
  3258 + updateByName?: string;
  3259 + /** @format date-time */
  3260 + updateTime?: string;
3180 3261 }
3181 3262  
3182 3263 export interface ResearchGroupMemberRequestsRequest {
... ... @@ -3385,6 +3466,7 @@ export interface SubOrder {
3385 3466 /** @format date-time */
3386 3467 updateTime?: string;
3387 3468 urgentInvoiceAuditNotes?: string;
  3469 + useOldInvoicingProcess?: boolean;
3388 3470 /** @format int32 */
3389 3471 version?: number;
3390 3472 }
... ... @@ -3815,6 +3897,76 @@ export interface InvoiceDetail {
3815 3897 unit?: string;
3816 3898 }
3817 3899  
  3900 +export interface ResearchGroupAccounts {
  3901 + /**
  3902 + * @description
  3903 + * 关联的账号id
  3904 + * @format int64
  3905 + */
  3906 + accountId?: number;
  3907 + /**
  3908 + * @description
  3909 + * 关联的账号名称
  3910 + */
  3911 + accountName?: string;
  3912 + /**
  3913 + * @description
  3914 + * 关联的账号手机号
  3915 + */
  3916 + accountPhone?: string;
  3917 + createByName?: string;
  3918 + /** @format date-time */
  3919 + createTime?: string;
  3920 + /**
  3921 + * @description
  3922 + * 课题组id
  3923 + * @format int64
  3924 + */
  3925 + groupId?: number;
  3926 + /**
  3927 + * @description
  3928 + * 主键id
  3929 + * @format int64
  3930 + */
  3931 + id?: number;
  3932 + logicDelete?: boolean;
  3933 + updateByName?: string;
  3934 + /** @format date-time */
  3935 + updateTime?: string;
  3936 +}
  3937 +
  3938 +export interface ResearchGroupMembers {
  3939 + createByName?: string;
  3940 + /** @format date-time */
  3941 + createTime?: string;
  3942 + /**
  3943 + * @description
  3944 + * 课题组ID
  3945 + * @format int64
  3946 + */
  3947 + groupId?: number;
  3948 + /**
  3949 + * @description
  3950 + * 主键id
  3951 + * @format int64
  3952 + */
  3953 + id?: number;
  3954 + logicDelete?: boolean;
  3955 + /**
  3956 + * @description
  3957 + * 成员名称
  3958 + */
  3959 + memberName?: string;
  3960 + /**
  3961 + * @description
  3962 + * 成员手机号
  3963 + */
  3964 + memberPhone?: string;
  3965 + updateByName?: string;
  3966 + /** @format date-time */
  3967 + updateTime?: string;
  3968 +}
  3969 +
3818 3970 export interface SalesRechargePrepaymentAuditRequest {
3819 3971 /**
3820 3972 * @description
... ...
src/services/request.ts
... ... @@ -9,7 +9,7 @@ import type {
9 9 AdminClientDto,
10 10 AdminDeptQueryVO,
11 11 AdminDeptVO,
12   - AdminInvoicingAccountDto,
  12 + AdminInvoicingAccountDTO,
13 13 AdminJobQueryVO,
14 14 AdminJobVO,
15 15 AdminMenuQueryVO,
... ... @@ -31,7 +31,7 @@ import type {
31 31 ApiOrderEvaluatedRequest,
32 32 ApiQueryOrderDetailRequest,
33 33 ApiQueryOrderStatusCountsRequest,
34   - ApplyInvoiceDto,
  34 + ApplyInvoiceDTO,
35 35 AuditDto,
36 36 AuditVO,
37 37 CancelInvoiceAndBankStatementDto,
... ... @@ -54,7 +54,7 @@ import type {
54 54 Dto,
55 55 InventoryMaterialStockReq,
56 56 InvoiceDto,
57   - InvoiceRecordDto,
  57 + InvoiceRecordDTO,
58 58 InvoiceRecordQueryRequest,
59 59 MainOrderqueryRequest,
60 60 MaterialListReply,
... ... @@ -63,7 +63,6 @@ import type {
63 63 MaterialUnitListRes,
64 64 MeasureUnitListRes,
65 65 MessageQueryDTO,
66   - ModelAndView,
67 66 OrderAddVO,
68 67 OrderAuditLogQueryVO,
69 68 OrderBaseInfoQueryVO,
... ... @@ -474,6 +473,60 @@ export const postAdminClientExportClients = /* #__PURE__ */ (() =&gt; {
474 473 return request;
475 474 })();
476 475  
  476 +/** @description response type for postAdminClientGetStatisticalData */
  477 +export interface PostAdminClientGetStatisticalDataResponse {
  478 + /**
  479 + * @description
  480 + * OK
  481 + */
  482 + 200: ServerResult;
  483 + /**
  484 + * @description
  485 + * Created
  486 + */
  487 + 201: any;
  488 + /**
  489 + * @description
  490 + * Unauthorized
  491 + */
  492 + 401: any;
  493 + /**
  494 + * @description
  495 + * Forbidden
  496 + */
  497 + 403: any;
  498 + /**
  499 + * @description
  500 + * Not Found
  501 + */
  502 + 404: any;
  503 +}
  504 +
  505 +export type PostAdminClientGetStatisticalDataResponseSuccess =
  506 + PostAdminClientGetStatisticalDataResponse[200];
  507 +/**
  508 + * @description
  509 + * 修改跟进信息
  510 + * @tags 客户管理
  511 + * @produces *
  512 + * @consumes application/json
  513 + */
  514 +export const postAdminClientGetStatisticalData = /* #__PURE__ */ (() => {
  515 + const method = 'post';
  516 + const url = '/admin/client/getStatisticalData';
  517 + function request(): Promise<PostAdminClientGetStatisticalDataResponseSuccess> {
  518 + return requester(request.url, {
  519 + method: request.method,
  520 + }) as unknown as Promise<PostAdminClientGetStatisticalDataResponseSuccess>;
  521 + }
  522 +
  523 + /** http method */
  524 + request.method = method;
  525 + /** request url */
  526 + request.url = url;
  527 + return request;
  528 +})();
  529 +
477 530 /** @description request parameter type for postAdminClientImportClient */
478 531 export interface PostAdminClientImportClientOption {
479 532 /**
... ... @@ -3172,7 +3225,9 @@ export interface GetErrorResponse {
3172 3225 * @description
3173 3226 * OK
3174 3227 */
3175   - 200: ModelAndView;
  3228 + 200: {
  3229 + [propertyName: string]: any;
  3230 + };
3176 3231 /**
3177 3232 * @description
3178 3233 * Unauthorized
... ... @@ -3193,9 +3248,9 @@ export interface GetErrorResponse {
3193 3248 export type GetErrorResponseSuccess = GetErrorResponse[200];
3194 3249 /**
3195 3250 * @description
3196   - * errorHtml
  3251 + * error
3197 3252 * @tags basic-error-controller
3198   - * @produces text/html
  3253 + * @produces *
3199 3254 */
3200 3255 export const getError = /* #__PURE__ */ (() => {
3201 3256 const method = 'get';
... ... @@ -3219,7 +3274,9 @@ export interface PutErrorResponse {
3219 3274 * @description
3220 3275 * OK
3221 3276 */
3222   - 200: ModelAndView;
  3277 + 200: {
  3278 + [propertyName: string]: any;
  3279 + };
3223 3280 /**
3224 3281 * @description
3225 3282 * Created
... ... @@ -3245,9 +3302,9 @@ export interface PutErrorResponse {
3245 3302 export type PutErrorResponseSuccess = PutErrorResponse[200];
3246 3303 /**
3247 3304 * @description
3248   - * errorHtml
  3305 + * error
3249 3306 * @tags basic-error-controller
3250   - * @produces text/html
  3307 + * @produces *
3251 3308 * @consumes application/json
3252 3309 */
3253 3310 export const putError = /* #__PURE__ */ (() => {
... ... @@ -3272,7 +3329,9 @@ export interface PostErrorResponse {
3272 3329 * @description
3273 3330 * OK
3274 3331 */
3275   - 200: ModelAndView;
  3332 + 200: {
  3333 + [propertyName: string]: any;
  3334 + };
3276 3335 /**
3277 3336 * @description
3278 3337 * Created
... ... @@ -3298,9 +3357,9 @@ export interface PostErrorResponse {
3298 3357 export type PostErrorResponseSuccess = PostErrorResponse[200];
3299 3358 /**
3300 3359 * @description
3301   - * errorHtml
  3360 + * error
3302 3361 * @tags basic-error-controller
3303   - * @produces text/html
  3362 + * @produces *
3304 3363 * @consumes application/json
3305 3364 */
3306 3365 export const postError = /* #__PURE__ */ (() => {
... ... @@ -3325,7 +3384,9 @@ export interface DeleteErrorResponse {
3325 3384 * @description
3326 3385 * OK
3327 3386 */
3328   - 200: ModelAndView;
  3387 + 200: {
  3388 + [propertyName: string]: any;
  3389 + };
3329 3390 /**
3330 3391 * @description
3331 3392 * No Content
... ... @@ -3346,9 +3407,9 @@ export interface DeleteErrorResponse {
3346 3407 export type DeleteErrorResponseSuccess = DeleteErrorResponse[200];
3347 3408 /**
3348 3409 * @description
3349   - * errorHtml
  3410 + * error
3350 3411 * @tags basic-error-controller
3351   - * @produces text/html
  3412 + * @produces *
3352 3413 */
3353 3414 export const deleteError = /* #__PURE__ */ (() => {
3354 3415 const method = 'delete';
... ... @@ -3372,7 +3433,9 @@ export interface OptionsErrorResponse {
3372 3433 * @description
3373 3434 * OK
3374 3435 */
3375   - 200: ModelAndView;
  3436 + 200: {
  3437 + [propertyName: string]: any;
  3438 + };
3376 3439 /**
3377 3440 * @description
3378 3441 * No Content
... ... @@ -3393,9 +3456,9 @@ export interface OptionsErrorResponse {
3393 3456 export type OptionsErrorResponseSuccess = OptionsErrorResponse[200];
3394 3457 /**
3395 3458 * @description
3396   - * errorHtml
  3459 + * error
3397 3460 * @tags basic-error-controller
3398   - * @produces text/html
  3461 + * @produces *
3399 3462 * @consumes application/json
3400 3463 */
3401 3464 export const optionsError = /* #__PURE__ */ (() => {
... ... @@ -3420,7 +3483,9 @@ export interface HeadErrorResponse {
3420 3483 * @description
3421 3484 * OK
3422 3485 */
3423   - 200: ModelAndView;
  3486 + 200: {
  3487 + [propertyName: string]: any;
  3488 + };
3424 3489 /**
3425 3490 * @description
3426 3491 * No Content
... ... @@ -3441,9 +3506,9 @@ export interface HeadErrorResponse {
3441 3506 export type HeadErrorResponseSuccess = HeadErrorResponse[200];
3442 3507 /**
3443 3508 * @description
3444   - * errorHtml
  3509 + * error
3445 3510 * @tags basic-error-controller
3446   - * @produces text/html
  3511 + * @produces *
3447 3512 * @consumes application/json
3448 3513 */
3449 3514 export const headError = /* #__PURE__ */ (() => {
... ... @@ -3468,7 +3533,9 @@ export interface PatchErrorResponse {
3468 3533 * @description
3469 3534 * OK
3470 3535 */
3471   - 200: ModelAndView;
  3536 + 200: {
  3537 + [propertyName: string]: any;
  3538 + };
3472 3539 /**
3473 3540 * @description
3474 3541 * No Content
... ... @@ -3489,9 +3556,9 @@ export interface PatchErrorResponse {
3489 3556 export type PatchErrorResponseSuccess = PatchErrorResponse[200];
3490 3557 /**
3491 3558 * @description
3492   - * errorHtml
  3559 + * error
3493 3560 * @tags basic-error-controller
3494   - * @produces text/html
  3561 + * @produces *
3495 3562 * @consumes application/json
3496 3563 */
3497 3564 export const patchError = /* #__PURE__ */ (() => {
... ... @@ -10517,7 +10584,7 @@ export type PostResearchGroupMemberRequestsAddResponseSuccess =
10517 10584 /**
10518 10585 * @description
10519 10586 * 新增申请信息
10520   - * @tags research-group-member-requests-controller
  10587 + * @tags research-group-request-controller
10521 10588 * @produces *
10522 10589 * @consumes application/json
10523 10590 */
... ... @@ -10588,7 +10655,7 @@ export type PostResearchGroupMemberRequestsDeleteResponseSuccess =
10588 10655 /**
10589 10656 * @description
10590 10657 * 删除申请信息
10591   - * @tags research-group-member-requests-controller
  10658 + * @tags research-group-request-controller
10592 10659 * @produces *
10593 10660 * @consumes application/json
10594 10661 */
... ... @@ -10659,7 +10726,7 @@ export type PostResearchGroupMemberRequestsDetailResponseSuccess =
10659 10726 /**
10660 10727 * @description
10661 10728 * 查询申请信息
10662   - * @tags research-group-member-requests-controller
  10729 + * @tags research-group-request-controller
10663 10730 * @produces *
10664 10731 * @consumes application/json
10665 10732 */
... ... @@ -10730,7 +10797,7 @@ export type PostResearchGroupMemberRequestsEditResponseSuccess =
10730 10797 /**
10731 10798 * @description
10732 10799 * 编辑申请信息
10733   - * @tags research-group-member-requests-controller
  10800 + * @tags research-group-request-controller
10734 10801 * @produces *
10735 10802 * @consumes application/json
10736 10803 */
... ... @@ -10801,7 +10868,7 @@ export type PostResearchGroupMemberRequestsListResponseSuccess =
10801 10868 /**
10802 10869 * @description
10803 10870 * 申请列表
10804   - * @tags research-group-member-requests-controller
  10871 + * @tags research-group-request-controller
10805 10872 * @produces *
10806 10873 * @consumes application/json
10807 10874 */
... ... @@ -11865,6 +11932,60 @@ export const postServiceConstCanApplyAfterInvoicingStatus =
11865 11932 return request;
11866 11933 })();
11867 11934  
  11935 +/** @description response type for postServiceConstClientGroupFilters */
  11936 +export interface PostServiceConstClientGroupFiltersResponse {
  11937 + /**
  11938 + * @description
  11939 + * OK
  11940 + */
  11941 + 200: ServerResult;
  11942 + /**
  11943 + * @description
  11944 + * Created
  11945 + */
  11946 + 201: any;
  11947 + /**
  11948 + * @description
  11949 + * Unauthorized
  11950 + */
  11951 + 401: any;
  11952 + /**
  11953 + * @description
  11954 + * Forbidden
  11955 + */
  11956 + 403: any;
  11957 + /**
  11958 + * @description
  11959 + * Not Found
  11960 + */
  11961 + 404: any;
  11962 +}
  11963 +
  11964 +export type PostServiceConstClientGroupFiltersResponseSuccess =
  11965 + PostServiceConstClientGroupFiltersResponse[200];
  11966 +/**
  11967 + * @description
  11968 + * 获取客户分组
  11969 + * @tags front-const-controller
  11970 + * @produces *
  11971 + * @consumes application/json
  11972 + */
  11973 +export const postServiceConstClientGroupFilters = /* #__PURE__ */ (() => {
  11974 + const method = 'post';
  11975 + const url = '/service/const/clientGroupFilters';
  11976 + function request(): Promise<PostServiceConstClientGroupFiltersResponseSuccess> {
  11977 + return requester(request.url, {
  11978 + method: request.method,
  11979 + }) as unknown as Promise<PostServiceConstClientGroupFiltersResponseSuccess>;
  11980 + }
  11981 +
  11982 + /** http method */
  11983 + request.method = method;
  11984 + /** request url */
  11985 + request.url = url;
  11986 + return request;
  11987 +})();
  11988 +
11868 11989 /** @description response type for postServiceConstClientLevels */
11869 11990 export interface PostServiceConstClientLevelsResponse {
11870 11991 /**
... ... @@ -11973,6 +12094,77 @@ export const postServiceConstGetPayeeEnum = /* #__PURE__ */ (() =&gt; {
11973 12094 return request;
11974 12095 })();
11975 12096  
  12097 +/** @description request parameter type for postServiceConstInitInvoiceDetailNames */
  12098 +export interface PostServiceConstInitInvoiceDetailNamesOption {
  12099 + /**
  12100 + * @description
  12101 + * productNames
  12102 + */
  12103 + body: {
  12104 + /**
  12105 + @description
  12106 + productNames */
  12107 + productNames: Array<string>;
  12108 + };
  12109 +}
  12110 +
  12111 +/** @description response type for postServiceConstInitInvoiceDetailNames */
  12112 +export interface PostServiceConstInitInvoiceDetailNamesResponse {
  12113 + /**
  12114 + * @description
  12115 + * OK
  12116 + */
  12117 + 200: ServerResult;
  12118 + /**
  12119 + * @description
  12120 + * Created
  12121 + */
  12122 + 201: any;
  12123 + /**
  12124 + * @description
  12125 + * Unauthorized
  12126 + */
  12127 + 401: any;
  12128 + /**
  12129 + * @description
  12130 + * Forbidden
  12131 + */
  12132 + 403: any;
  12133 + /**
  12134 + * @description
  12135 + * Not Found
  12136 + */
  12137 + 404: any;
  12138 +}
  12139 +
  12140 +export type PostServiceConstInitInvoiceDetailNamesResponseSuccess =
  12141 + PostServiceConstInitInvoiceDetailNamesResponse[200];
  12142 +/**
  12143 + * @description
  12144 + * 根据公司名获取收款方
  12145 + * @tags front-const-controller
  12146 + * @produces *
  12147 + * @consumes application/json
  12148 + */
  12149 +export const postServiceConstInitInvoiceDetailNames = /* #__PURE__ */ (() => {
  12150 + const method = 'post';
  12151 + const url = '/service/const/initInvoiceDetailNames';
  12152 + function request(
  12153 + option: PostServiceConstInitInvoiceDetailNamesOption,
  12154 + ): Promise<PostServiceConstInitInvoiceDetailNamesResponseSuccess> {
  12155 + return requester(request.url, {
  12156 + method: request.method,
  12157 + ...option,
  12158 + }) as unknown as Promise<PostServiceConstInitInvoiceDetailNamesResponseSuccess>;
  12159 + }
  12160 +
  12161 + /** http method */
  12162 + request.method = method;
  12163 + /** request url */
  12164 + request.url = url;
  12165 + return request;
  12166 +})();
  12167 +
11976 12168 /** @description response type for postServiceConstInvoiceType */
11977 12169 export interface PostServiceConstInvoiceTypeResponse {
11978 12170 /**
... ... @@ -12152,6 +12344,60 @@ export const postServiceConstListInvoiceDetailNames = /* #__PURE__ */ (() =&gt; {
12152 12344 return request;
12153 12345 })();
12154 12346  
  12347 +/** @description response type for postServiceConstListResearchGroupsStatus */
  12348 +export interface PostServiceConstListResearchGroupsStatusResponse {
  12349 + /**
  12350 + * @description
  12351 + * OK
  12352 + */
  12353 + 200: ServerResult;
  12354 + /**
  12355 + * @description
  12356 + * Created
  12357 + */
  12358 + 201: any;
  12359 + /**
  12360 + * @description
  12361 + * Unauthorized
  12362 + */
  12363 + 401: any;
  12364 + /**
  12365 + * @description
  12366 + * Forbidden
  12367 + */
  12368 + 403: any;
  12369 + /**
  12370 + * @description
  12371 + * Not Found
  12372 + */
  12373 + 404: any;
  12374 +}
  12375 +
  12376 +export type PostServiceConstListResearchGroupsStatusResponseSuccess =
  12377 + PostServiceConstListResearchGroupsStatusResponse[200];
  12378 +/**
  12379 + * @description
  12380 + * 获取课题组状态
  12381 + * @tags front-const-controller
  12382 + * @produces *
  12383 + * @consumes application/json
  12384 + */
  12385 +export const postServiceConstListResearchGroupsStatus = /* #__PURE__ */ (() => {
  12386 + const method = 'post';
  12387 + const url = '/service/const/listResearchGroupsStatus';
  12388 + function request(): Promise<PostServiceConstListResearchGroupsStatusResponseSuccess> {
  12389 + return requester(request.url, {
  12390 + method: request.method,
  12391 + }) as unknown as Promise<PostServiceConstListResearchGroupsStatusResponseSuccess>;
  12392 + }
  12393 +
  12394 + /** http method */
  12395 + request.method = method;
  12396 + /** request url */
  12397 + request.url = url;
  12398 + return request;
  12399 +})();
  12400 +
12155 12401 /** @description response type for postServiceConstNotCanModifyInvoiceRecordStatus */
12156 12402 export interface PostServiceConstNotCanModifyInvoiceRecordStatusResponse {
12157 12403 /**
... ... @@ -12416,7 +12662,7 @@ export interface PostServiceInvoiceAddInvoicingAccountOption {
12416 12662 /**
12417 12663 @description
12418 12664 dto */
12419   - dto: AdminInvoicingAccountDto;
  12665 + dto: AdminInvoicingAccountDTO;
12420 12666 };
12421 12667 }
12422 12668  
... ... @@ -12487,7 +12733,7 @@ export interface PostServiceInvoiceApplyInvoiceOption {
12487 12733 /**
12488 12734 @description
12489 12735 dto */
12490   - dto: ApplyInvoiceDto;
  12736 + dto: ApplyInvoiceDTO;
12491 12737 };
12492 12738 }
12493 12739  
... ... @@ -13534,7 +13780,7 @@ export interface PostServiceInvoiceModifyRecordOption {
13534 13780 /**
13535 13781 @description
13536 13782 dto */
13537   - dto: InvoiceRecordDto;
  13783 + dto: InvoiceRecordDTO;
13538 13784 };
13539 13785 }
13540 13786  
... ...