Commit cba8c9eacf0a91533138ce7d0322057884c9fc48

Authored by boyang
1 parent 978db6d6

fix: 跟进记录根据状态禁止工单编辑

.umirc.ts
... ... @@ -14,8 +14,8 @@ export default defineConfig({
14 14 },
15 15 proxy: {
16 16 '/api/': {
17   - // target: 'http://localhost:8085/',
18   - target: 'http://192.168.1.6:8085/',
  17 + target: 'http://localhost:8085/',
  18 + // target: 'http://192.168.1.6:8085/',
19 19 // target: 'http://39.108.227.113:8085/',
20 20 changeOrigin: true,
21 21 pathRewrite: { '^/api': '' },
... ...
src/pages/Client/FollowRecord/Components/ClientImportModal.tsx deleted 100644 → 0
1   -import { RESPONSE_CODE } from '@/constants/enum';
2   -import { downloadFile } from '@/services/order';
3   -import { blobToJson } from '@/utils';
4   -import { ModalForm, ProFormUploadDragger } from '@ant-design/pro-components';
5   -import { Button, Form, message } from 'antd';
6   -import { RcFile } from 'antd/es/upload';
7   -import axios from 'axios';
8   -
9   -export default () => {
10   - const [form] = Form.useForm();
11   - const [messageApi, contextHolder] = message.useMessage();
12   - const downloadImportTemplate = () => {
13   - messageApi.open({
14   - type: 'loading',
15   - content: '正在导入...',
16   - duration: 0,
17   - });
18   - downloadFile(
19   - '/api/admin/client/downloadImportTemplate',
20   - '客户导入模板.xlsx',
21   - 'post',
22   - {},
23   - () => {
24   - messageApi.destroy();
25   - },
26   - );
27   - };
28   -
29   - return (
30   - <ModalForm
31   - title="导入客户信息"
32   - trigger={<Button type="primary">导入客户信息</Button>}
33   - form={form}
34   - autoFocusFirstInput
35   - modalProps={{
36   - destroyOnClose: true,
37   - onCancel: () => console.log('run'),
38   - }}
39   - submitTimeout={2000}
40   - onFinish={async (values) => {
41   - const formData = new FormData();
42   - values.file.forEach((file) => {
43   - formData.append('file', file.originFileObj as RcFile);
44   - });
45   - axios({
46   - url: '/api/admin/client/importClient',
47   - method: 'post',
48   - responseType: 'blob',
49   - headers: {
50   - Authorization: localStorage.getItem('token'),
51   - 'Content-Type':
52   - 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
53   - },
54   - data: formData,
55   - })
56   - .then((response) => {
57   - let data = response.data;
58   - if (data.type === 'application/json') {
59   - blobToJson(data).then((dataJson) => {
60   - if (dataJson?.result === RESPONSE_CODE.SUCCESS) {
61   - message.success(dataJson?.message);
62   - } else {
63   - message.error(dataJson?.message);
64   - }
65   - });
66   - } else {
67   - message.error('上传失败,已下载错误信息表格');
68   - // 创建一个新的 Blob 对象,它包含了服务器响应的数据(即你的 Excel 文件)
69   - const blob = new Blob([response.data]); // Excel 的 MIME 类型
70   - const downloadUrl = window.URL.createObjectURL(blob);
71   - const a = document.createElement('a');
72   - a.href = downloadUrl;
73   - a.download = '银行流水导入模板.xlsx'; // 你可以为文件命名
74   - document.body.appendChild(a);
75   - a.click(); // 模拟点击操作来下载文件
76   - URL.revokeObjectURL(downloadUrl); // 释放掉 blob 对象所占用的内存
77   - document.body.removeChild(a);
78   - }
79   - })
80   - .catch((error) => {
81   - // 处理错误
82   - message.error('系统出现异常了,请联系管理员', error);
83   - })
84   - .finally(() => {});
85   - return true;
86   - }}
87   - >
88   - <ProFormUploadDragger max={1} label="上传" name="file" />
89   - <Button type="link" onClick={downloadImportTemplate}>
90   - 下载导入模板
91   - </Button>
92   - {contextHolder}
93   - </ModalForm>
94   - );
95   -};
src/pages/Client/FollowRecord/Components/ClientModal.tsx
... ... @@ -19,8 +19,10 @@ import {
19 19 } from '@ant-design/pro-components';
20 20 import { Button, Col, Form, Row, message } from 'antd';
21 21 import { RcFile } from 'antd/es/upload';
  22 +import { useEffect } from 'react';
22 23 import './style.css';
23 24 export default ({ data, type, reloadTable }) => {
  25 + useEffect(() => {});
24 26 const [form] = Form.useForm();
25 27 const onfinish = async (values) => {
26 28 const resSearchId = await postAdminClientQueryClientPage({
... ... @@ -325,6 +327,7 @@ export default ({ data, type, reloadTable }) =&gt; {
325 327 readonly={optType[type].readOnly}
326 328 fieldProps={{
327 329 labelInValue: false,
  330 + disabled: data?.ticketsStatus === 'SOLVED',
328 331 }}
329 332 initialValue={data?.ticketsType ? data?.ticketsType + '' : null}
330 333 request={async () => {
... ... @@ -339,6 +342,10 @@ export default ({ data, type, reloadTable }) =&gt; {
339 342 name="ticketsDetail"
340 343 label="工单详情"
341 344 placeholder="请输入工单详情"
  345 + fieldProps={{
  346 + labelInValue: false,
  347 + disabled: data?.ticketsStatus === 'SOLVED',
  348 + }}
342 349 initialValue={data?.ticketsDetail ? data?.ticketsDetail + '' : null}
343 350 readonly={optType[type].readOnly}
344 351 ></ProFormTextArea>
... ... @@ -374,6 +381,10 @@ export default ({ data, type, reloadTable }) =&gt; {
374 381 <Col span={4}>附件:</Col>
375 382 <Col span={20}>
376 383 <UploadC
  384 + fieldProps={{
  385 + labelInValue: false,
  386 + disabled: data?.ticketsStatus === 'SOLVED',
  387 + }}
377 388 onFilesChange={async (newFileList) => {
378 389 if (newFileList.length > 0) {
379 390 const urls = []; // 创建一个数组来存储所有的 URL
... ... @@ -414,6 +425,7 @@ export default ({ data, type, reloadTable }) =&gt; {
414 425 readonly={optType[type].readOnly}
415 426 fieldProps={{
416 427 labelInValue: false,
  428 + disabled: data?.ticketsStatus === 'SOLVED',
417 429 }}
418 430 initialValue={data?.assignPeople ? data?.assignPeople + '' : null}
419 431 label="指派人员"
... ...
src/pages/Client/FollowRecord/Components/ClientModal2.tsx deleted 100644 → 0
1   -import { RESPONSE_CODE } from '@/constants/enum';
2   -import UploadC from '@/pages/Invoice/waitProcessRecord/components/UploadSingleImg';
3   -import {
4   - postAdminClientAddOrModifyClientComunicationInfo,
5   - postAdminClientQueryClientPage,
6   - postOrderErpOrderStagesUpload,
7   - postOrderErpUsersListByPage,
8   - postServiceConstClientWay,
9   - postServiceConstTradeStatus,
10   -} from '@/services';
11   -import { enumToSelect } from '@/utils';
12   -import {
13   - ModalForm,
14   - ProFormDateTimePicker,
15   - ProFormSelect,
16   - ProFormText,
17   - ProFormTextArea,
18   - ProFormUploadDragger,
19   -} from '@ant-design/pro-components';
20   -import { Button, Col, Form, Row, message } from 'antd';
21   -import { RcFile } from 'antd/es/upload';
22   -import './style.css';
23   -export default ({ data, type, reloadTable }) => {
24   - const [form] = Form.useForm();
25   - const onfinish = async (values) => {
26   - const resSearchId = await postAdminClientQueryClientPage({
27   - data: {
28   - groupFilter: 'all',
29   - },
30   - });
31   - const matchingItem = resSearchId.data.data.find(
32   - (item) => item.id === values.name,
33   - );
34   - let matchedId;
35   - if (matchingItem) {
36   - matchedId = matchingItem.id; // 匹配成功,取出 id
37   - values.name = matchingItem.name;
38   - } else {
39   - matchedId = null; // 如果没有匹配项,可以设置为 null 或其他值
40   - }
41   - const res = await postAdminClientAddOrModifyClientComunicationInfo({
42   - data: {
43   - ...values,
44   - ticketsAttachments: form.getFieldValue('ticketsAttachments'),
45   - clientId: matchedId,
46   - },
47   - });
48   - if (res.result === RESPONSE_CODE.SUCCESS) {
49   - message.success('新增成功');
50   - reloadTable();
51   - return true;
52   - }
53   - // 不返回不会关闭弹框
54   - };
55   -
56   - const editOnfinish = async (values) => {
57   - // setEditClientId(data.clientId);
58   - values.clientId = data.clientId;
59   -
60   - // const resSearchId = await postAdminClientQueryClientPage({
61   - // data: {
62   - // groupFilter: 'all',
63   - // },
64   - // });
65   - // const matchingItem = resSearchId.data.data.find(
66   - // (item) => item.id === values.name,
67   - // );
68   - const res = await postAdminClientAddOrModifyClientComunicationInfo({
69   - data: {
70   - ...values,
71   - // ticketsAttachments: form.getFieldValue("ticketsAttachments"),
72   - ticketsAttachments:
73   - form.getFieldValue('ticketsAttachments') !== undefined
74   - ? form.getFieldValue('ticketsAttachments')
75   - : data?.ticketsAttachments,
76   - url:
77   - form.getFieldValue('url') !== undefined
78   - ? form.getFieldValue('url')
79   - : data?.url,
80   - // ticketsAttachments: data?.annexUrl,
81   - },
82   - });
83   - if (res.result === RESPONSE_CODE.SUCCESS) {
84   - message.success('新增成功');
85   - reloadTable();
86   - return true;
87   - }
88   - // 不返回不会关闭弹框
89   - };
90   - const optType = {
91   - add: {
92   - readOnly: false,
93   - title: '新增跟进记录',
94   - button: (
95   - <Button size={'middle'} type="primary">
96   - 新增
97   - </Button>
98   - ),
99   - onFinish: onfinish,
100   - },
101   - modify: {
102   - readOnly: false,
103   - title: '修改跟进记录',
104   - button: (
105   - <Button size={'middle'} type="primary">
106   - 编辑
107   - </Button>
108   - ),
109   - onFinish: editOnfinish,
110   - },
111   - detail: {
112   - readOnly: true,
113   - title: '查看跟进记录',
114   - button: (
115   - <Button size={'middle'} type="primary" color="red">
116   - 查看
117   - </Button>
118   - ),
119   - onFinish: () => {},
120   - },
121   - };
122   - return (
123   - <ModalForm
124   - title={optType[type].title}
125   - resize={{
126   - onResize() {
127   - console.log('resize!');
128   - },
129   - maxWidth: window.innerWidth * 0.8,
130   - minWidth: 400,
131   - }}
132   - form={form}
133   - trigger={optType[type].button}
134   - autoFocusFirstInput
135   - drawerProps={{
136   - destroyOnClose: true,
137   - }}
138   - submitTimeout={2000}
139   - onFinish={optType[type].onFinish}
140   - >
141   - <ProFormSelect
142   - name="name"
143   - readonly={optType[type].readOnly}
144   - fieldProps={{
145   - labelInValue: false,
146   - disabled: type === 'modify',
147   - }}
148   - initialValue={data ? data?.clientName + '' : null}
149   - label="客户"
150   - width="sm"
151   - request={async () => {
152   - const res = await postAdminClientQueryClientPage({
153   - data: {
154   - groupFilter: 'all',
155   - },
156   - });
157   - // const namesArray = res.data.data.map((item) => item.name);
158   - // const formattedObject = res.data.data.reduce((acc, name) => {
159   - // acc[name] = name; // 将名称作为键和值
160   - // return acc;
161   - // }, {});
162   - // console.log(namesArray, '5656namesArray');
163   - // const formattedObject = res.data.data.reduce((acc, item) => {
164   - // acc[item.name] = item.name; // 使用 name 作为键,id 作为值
165   - // return acc;
166   - // }, {});
167   - // return enumToSelect(formattedObject);
168   - const options = res.data.data.reduce((acc, item) => {
169   - acc.push({ label: item.name, value: item.id }); // 使用 name 作为 label,id 作为 value
170   - return acc;
171   - }, []);
172   - return options;
173   - }}
174   - rules={[
175   - {
176   - required: true,
177   - message: '请选择客户',
178   - },
179   - ]}
180   - ></ProFormSelect>
181   - <ProFormText
182   - name="contact"
183   - label="联系人"
184   - width="sm"
185   - placeholder="请输入联系人"
186   - initialValue={data?.content}
187   - readonly={optType[type].readOnly}
188   - rules={[
189   - {
190   - required: true,
191   - message: '请输入联系人',
192   - },
193   - ]}
194   - ></ProFormText>
195   - <ProFormText
196   - name="contactPhone"
197   - label="联系电话"
198   - width="sm"
199   - placeholder="请输入联系电话"
200   - initialValue={data?.content}
201   - readonly={optType[type].readOnly}
202   - rules={[
203   - {
204   - required: true,
205   - message: '请输入联系电话',
206   - },
207   - ]}
208   - ></ProFormText>
209   - <ProFormDateTimePicker
210   - name="datetime"
211   - label="跟进日期"
212   - initialValue={data ? data?.datetime + '' : null}
213   - placeholder="请选择跟进时间"
214   - width="sm"
215   - rules={[
216   - {
217   - required: true,
218   - message: '请选择跟进日期',
219   - },
220   - ]}
221   - />
222   - <ProFormSelect
223   - name="tradeStatus"
224   - label="跟进状态"
225   - width="sm"
226   - placeholder="请输入跟进状态"
227   - readonly={optType[type].readOnly}
228   - fieldProps={{
229   - labelInValue: false,
230   - }}
231   - initialValue={data?.tradeStatus ? data?.tradeStatus + '' : null}
232   - rules={[
233   - {
234   - required: true,
235   - message: '请输入跟进状态',
236   - },
237   - ]}
238   - request={async () => {
239   - const res = await postServiceConstTradeStatus();
240   - return enumToSelect(res.data);
241   - }}
242   - />
243   - <ProFormSelect
244   - name="way"
245   - width="sm"
246   - readonly={optType[type].readOnly}
247   - fieldProps={{
248   - labelInValue: false,
249   - }}
250   - initialValue={data?.way ? data?.way + '' : null}
251   - label="跟进方式"
252   - request={async () => {
253   - const res = await postServiceConstClientWay();
254   - return enumToSelect(res.data);
255   - }}
256   - rules={[
257   - {
258   - required: true,
259   - message: '请选择跟进方式',
260   - },
261   - ]}
262   - ></ProFormSelect>
263   - <ProFormTextArea
264   - name="content"
265   - label="跟进详情"
266   - placeholder="请输入跟进详情"
267   - initialValue={data?.content}
268   - readonly={optType[type].readOnly}
269   - rules={[
270   - {
271   - required: true,
272   - message: '请输入跟进详情',
273   - },
274   - ]}
275   - ></ProFormTextArea>
276   - <ProFormUploadDragger
277   - label="附件"
278   - name="attachment"
279   - action="upload.do"
280   - hidden={optType[type].readOnly}
281   - onChange={(info) => {
282   - const uploadFile = async ({ fileList: newFileList }) => {
283   - if (newFileList.length > 0) {
284   - const formData = new FormData();
285   - formData.append('file', newFileList[0].originFileObj as RcFile);
286   - const res = await postOrderErpOrderStagesUpload({
287   - data: formData,
288   - headers: {
289   - 'Content-Type':
290   - 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
291   - },
292   - });
293   - const url = res.data;
294   - console.log('attachments' + JSON.stringify(url));
295   - form.setFieldValue('attachments', url);
296   - } else {
297   - form.setFieldValue('attachments', null);
298   - }
299   - };
300   - uploadFile(info);
301   - }}
302   - max={1}
303   - />
304   - <a hidden={!optType[type].readOnly} href={data?.attachments} download>
305   - 下载附件
306   - </a>
307   - <ProFormTextArea
308   - name="comment"
309   - label="客户评价"
310   - placeholder="请输入客户评价"
311   - initialValue={data?.comment}
312   - readonly={optType[type].readOnly}
313   - ></ProFormTextArea>
314   - <ProFormText
315   - initialValue={data?.attachments}
316   - name="attachments"
317   - hidden
318   - ></ProFormText>
319   - <ProFormText initialValue={data?.id} name="id" hidden></ProFormText>
320   - <div className="styled-text">
321   - <div className="vertical-line"></div>
322   - <span className="text">工单指派</span>
323   - </div>
324   - <ProFormSelect
325   - name="ticketsType"
326   - label="工单类型"
327   - width="sm"
328   - placeholder="请输入工单类型"
329   - readonly={optType[type].readOnly}
330   - fieldProps={{
331   - labelInValue: false,
332   - }}
333   - initialValue={data?.ticketsType ? data?.ticketsType + '' : null}
334   - request={async () => {
335   - return [
336   - { label: '问题', value: 'QUESTION' },
337   - { label: '需求', value: 'DEMAND' },
338   - { label: '建议', value: 'ADVICE' },
339   - ];
340   - }}
341   - />
342   - <ProFormTextArea
343   - name="ticketsDetail"
344   - label="工单详情"
345   - placeholder="请输入工单详情"
346   - initialValue={data?.ticketsDetail ? data?.ticketsDetail + '' : null}
347   - readonly={optType[type].readOnly}
348   - ></ProFormTextArea>
349   - {/* <ProFormUploadDragger
350   - label="工单附件"
351   - name="ticketsAttachment"
352   - action="upload.do"
353   - hidden={optType[type].readOnly}
354   - onChange={(info) => {
355   - const uploadFile = async ({ fileList: newFileList }) => {
356   - if (newFileList.length > 0) {
357   - const formData = new FormData();
358   - formData.append('file', newFileList[0].originFileObj as RcFile);
359   - const res = await postOrderErpOrderStagesUpload({
360   - data: formData,
361   - headers: {
362   - 'Content-Type':
363   - 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
364   - },
365   - });
366   - const url = res.data;
367   - console.log('ticketsAttachments' + JSON.stringify(url));
368   - form.setFieldValue('ticketsAttachments', url);
369   - } else {
370   - form.setFieldValue('ticketsAttachments', null);
371   - }
372   - };
373   - uploadFile(info);
374   - }}
375   - max={1}
376   - /> */}
377   - <Row>
378   - <Col span={4}>附件:</Col>
379   - <Col span={20}>
380   - <UploadC
381   - onFilesChange={async (newFileList) => {
382   - if (newFileList.length > 0) {
383   - const urls = []; // 创建一个数组来存储所有的 URL
384   -
385   - for (const file of newFileList) {
386   - const formData = new FormData();
387   - formData.append('file', file.originFileObj as RcFile);
388   -
389   - const res = await postOrderErpOrderStagesUpload({
390   - data: formData,
391   - headers: {
392   - 'Content-Type':
393   - 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
394   - },
395   - });
396   -
397   - const url = res.data; // 获取响应中的 URL
398   - urls.push(url); // 将每个 URL 追加到数组中
399   - }
400   -
401   - // 将所有 URL 使用 ',' 进行拼接
402   - const combinedUrl = urls.join(',');
403   - form.setFieldValue('ticketsAttachments', combinedUrl); // 设置表单字段值为拼接后的 URL
404   - } else {
405   - form.setFieldValue('ticketsAttachments', null); // 如果没有文件,则清空 URL
406   - }
407   - }}
408   - ></UploadC>
409   - </Col>
410   - </Row>
411   - <a hidden={!optType[type].readOnly} href={data?.orderAttachment} download>
412   - {/* <a href={data?.annexUrl} download> */}
413   - 下载附件
414   - </a>
415   - <ProFormSelect
416   - name="assignPeople"
417   - width="sm"
418   - readonly={optType[type].readOnly}
419   - fieldProps={{
420   - labelInValue: false,
421   - }}
422   - initialValue={data?.assignPeople ? data?.assignPeople + '' : null}
423   - label="指派人员"
424   - request={async () => {
425   - const res = await postOrderErpUsersListByPage({
426   - data: {
427   - pageSize: 10000,
428   - },
429   - });
430   - const userOptions = res.data.records
431   - ? res.data.records.map((user) => ({
432   - label: user.userName, // 或者使用其他需要的属性
433   - value: user.userName, // 作为value的字段
434   - }))
435   - : [];
436   - return userOptions;
437   - }}
438   - ></ProFormSelect>
439   - {/* <Row>
440   - <Col span={4}>上传发票:</Col>
441   - <Col span={20}>
442   - <UploadC
443   - onFilesChange={async (newFileList) => {
444   - if (newFileList.length > 0) {
445   - const urls = []; // 创建一个数组来存储所有的 URL
446   -
447   - for (const file of newFileList) {
448   - const formData = new FormData();
449   - formData.append('file', file.originFileObj as RcFile);
450   -
451   - const res = await postOrderErpOrderStagesUpload({
452   - data: formData,
453   - headers: {
454   - 'Content-Type':
455   - 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
456   - },
457   - });
458   -
459   - const url = res.data; // 获取响应中的 URL
460   - urls.push(url); // 将每个 URL 追加到数组中
461   - }
462   -
463   - // 将所有 URL 使用 ',' 进行拼接
464   - const combinedUrl = urls.join(',');
465   - form.setFieldValue('url', combinedUrl); // 设置表单字段值为拼接后的 URL
466   - } else {
467   - form.setFieldValue('url', null); // 如果没有文件,则清空 URL
468   - }
469   - }}
470   - ></UploadC>
471   - </Col>
472   - </Row> */}
473   - </ModalForm>
474   - );
475   -};
src/pages/Client/FollowRecord/Components/CommunicationHistoryModal.tsx
... ... @@ -33,6 +33,7 @@ export default ({ data, reloadTable }) =&gt; {
33 33 const [assignPeople, setAssignPeople] = useState(''); // 附件名称
34 34 useEffect(() => {
35 35 const request = async () => {
  36 + console.log(data, '5656datatatatata');
36 37 const res = await postAdminClientQueryClientComunicationInfo({
37 38 data: {
38 39 id: data.id,
... ... @@ -48,8 +49,8 @@ export default ({ data, reloadTable }) =&gt; {
48 49 // data.annexUrl = resTicket.data.annexUrl;
49 50 // data.assignPeople = resTicket.data.assignPeople;
50 51 // console.log(resTicket, '5656resTicket');
  52 + // const dataSearch = res.data.data[0];
51 53 const dataSearch = res.data.data[0];
52   - console.log(dataSearch, '5656dataSearch');
53 54 if (dataSearch) {
54 55 // data.type = resTicket.data.type;
55 56 // data.detailText = resTicket.data.detailText;
... ... @@ -199,9 +200,7 @@ export default ({ data, reloadTable }) =&gt; {
199 200 <ClientModal
200 201 key={'modify'}
201 202 // data={data} // 将表单数据传递给 ClientModal
202   - data={{
203   - data,
204   - }} // 传递修改后的 data
  203 + data={data} // 传递修改后的 data
205 204 reloadTable={() => {
206 205 actionRef?.current?.reload(); // 重新加载表格数据
207 206 props.submit();
... ...
src/pages/Client/FollowRecord/index.tsx
... ... @@ -12,7 +12,6 @@ import type { ActionType } from &#39;@ant-design/pro-components&#39;;
12 12 import { ProTable } from '@ant-design/pro-components';
13 13 import { Button, Popconfirm, Space, message } from 'antd';
14 14 import { useRef, useState } from 'react';
15   -import ClientModal2 from './Components/ClientModal2';
16 15  
17 16 export default () => {
18 17 const actionRef = useRef<ActionType>();
... ... @@ -23,6 +22,7 @@ export default () =&gt; {
23 22  
24 23 // 更新 refreshKey,强制刷新 CommunicationHistoryModal
25 24 setRefreshKey((prevKey) => prevKey + 1);
  25 + console.log('5656refresh');
26 26 };
27 27 //biaoji
28 28 const columns = [
... ... @@ -241,7 +241,8 @@ export default () =&gt; {
241 241 return [
242 242 <CommunicationHistoryModal
243 243 // key={'communicationHistory'}
244   - key={`communicationHistory-${refreshKey}`} // 使用 refreshKey 来强制更新组件
  244 + // key={'communicationHistory'}
  245 + key={`${refreshKey}`} // 使用 refreshKey 来强制更新组件
245 246 data={record}
246 247 // reloadTable={() => {
247 248 // actionRef.current.reload();
... ... @@ -249,7 +250,7 @@ export default () =&gt; {
249 250 // }}
250 251 reloadTable={reload}
251 252 />,
252   - <ClientModal2
  253 + <ClientModal
253 254 key={'modify'}
254 255 // data={data} // 将表单数据传递给 ClientModal
255 256 data={record} // 传递修改后的 data
... ...