6c7c2fa5
Shinner
编辑车系任务最大位数
|
1
|
import React, { useEffect, useState } from "react";
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import {
Card,
Table,
DatePicker,
Row,
message,
Input,
Button,
Modal,
} from "antd";
import * as API from "./api";
import { PageHeaderWrapper } from "@ant-design/pro-layout";
import { history } from "umi";
|
d24e7d31
Shinner
增加零售任务分配菜单静态页面
|
15
|
import moment, { Moment } from "moment";
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
16
17
|
import useInitial from "@/hooks/useInitail";
import { Provider, useStore } from "./store";
|
bdad4eb5
Shinner
调试自动分配接口
|
18
|
import ApprovalProgressModal from "@/pages/stock/AdvanceProgress/components/ApproveModal";
|
aeeb3492
Shinner
增加预览任务功能
|
19
20
21
22
|
import EntryTaskPreview from "./components/EntryTaskPreview";
import { OrderTaskApprovalType } from "./entity";
import AdviserTaskPreview from "./components/AdviserTaskPreview";
import SeriesTaskPreview from "./components/SeriesTaskPreview";
|
4d0d5719
Shinner
提交审批增加备注和附件提交
|
23
|
import ApproveModal from "@/pages/order3/Common/ApproveModal";
|
bdad4eb5
Shinner
调试自动分配接口
|
24
25
|
import SaleTaskAutoAssign from "./components/SaleTaskAutoAssign";
import SaleTaskBatchSet from "./components/SaleTaskBatchSet";
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
26
|
import { ColumnsType } from "antd/es/table";
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
27
28
29
30
31
32
33
34
|
export default () => (
<Provider>
<SaleTaskList />
</Provider>
);
function SaleTaskList() {
|
e26233dd
Shinner
更换审批进度组件
|
35
36
|
const { isReadOnly, setShopTaskItem, setIsReadOnly } = useStore();
const [approve, setApprove] = useState({ visible: false, orderNo: "" });
|
4d0d5719
Shinner
提交审批增加备注和附件提交
|
37
|
const [approveOpen, setApproveOpen] = useState(false);
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
38
|
const [targetMonth, setTargetMonth] = useState(moment());
|
aeeb3492
Shinner
增加预览任务功能
|
39
40
41
42
43
44
|
const [etpVisible, setEtpVisible] = useState(false);
const [previewTaskParams, setPreviewTaskParams] = useState({});
const [atpVisible, setAtpVisible] = useState(false);
const [adviserTaskParams, setAdviserTaskParams] = useState({});
const [stpVisible, setStpVisible] = useState(false);
const [seriesTaskParams, setSeriesTaskParams] = useState({});
|
a21e5b52
Shinner
增加零售任务分配菜单静态页面
|
45
|
|
bdad4eb5
Shinner
调试自动分配接口
|
46
47
48
|
const [autoVisible, setAutoVisible] = useState(false);
const [batchVisible, setBatchVisible] = useState(false);
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
49
50
51
52
|
const { data, loading, setParams } = useInitial(
API.getSaleTaskApi,
{} as API.GetSaleTaskApiRes,
{
|
3b0d1ee6
Shinner
增加零售任务分配菜单静态页面
|
53
|
taskDate: targetMonth.valueOf(),
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
54
55
56
|
}
);
|
d24e7d31
Shinner
增加零售任务分配菜单静态页面
|
57
|
useEffect(() => {
|
df7d79e7
Shinner
调试零售任务分配接口
|
58
|
setIsReadOnly(!data.canModified);
|
d24e7d31
Shinner
增加零售任务分配菜单静态页面
|
59
60
|
}, [data]);
|
d24e7d31
Shinner
增加零售任务分配菜单静态页面
|
61
62
63
64
65
66
|
const handleChangeMonth = (date: Moment | null) => {
setTargetMonth(moment(date));
setParams({ taskDate: moment(date).valueOf() }, true);
};
const goToEditPage = (record: API.ShopTaskItem) => {
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
67
|
setShopTaskItem(record);
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
68
69
|
history.push({
pathname: "/order3/saleTask/edit",
|
11ea8143
Shinner
调试零售任务分配接口
|
70
71
72
73
|
query: {
readOnly: isReadOnly ? "1" : "0",
shopId: String(record.shopId),
taskDate: String(targetMonth.valueOf()),
|
d24e7d31
Shinner
增加零售任务分配菜单静态页面
|
74
|
},
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
75
76
77
|
});
};
|
bdad4eb5
Shinner
调试自动分配接口
|
78
79
80
81
82
83
84
85
86
87
88
89
90
|
// 查看销顾任务
const goToAdviserPage = (record: API.ShopTaskItem) => {
history.push({
pathname: "/order3/saleTask/edit",
query: {
readOnly: isReadOnly ? "1" : "0",
shopId: String(record.shopId),
taskDate: String(targetMonth.valueOf()),
currTab: "2",
},
});
};
|
11ea8143
Shinner
调试零售任务分配接口
|
91
92
|
// 查看流程进度
const viewProcess = () => {
|
e26233dd
Shinner
更换审批进度组件
|
93
|
setApprove({
|
11ea8143
Shinner
调试零售任务分配接口
|
94
|
visible: true,
|
11ea8143
Shinner
调试零售任务分配接口
|
95
96
97
98
|
orderNo: data.approvalNumber,
});
};
|
a21e5b52
Shinner
增加零售任务分配菜单静态页面
|
99
|
const cancelSaleTask = () => {
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
100
101
|
Modal.confirm({
title: "提示",
|
11ea8143
Shinner
调试零售任务分配接口
|
102
|
content: `确认撤销【${targetMonth.format("YYYY-MM")}】零售任务审批吗?`,
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
zIndex: 1002,
onOk: () => {
API.cancelSaleTask({
id: data.id,
})
.then((res) => {
message.success("撤销成功");
})
.catch((error: any) => {
message.error(error.message ?? "请求失败");
})
.finally(() => {
setParams({}, true);
});
},
});
};
|
4d0d5719
Shinner
提交审批增加备注和附件提交
|
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
const submitSaleTask = (parmas: any) => {
const hide = message.loading("提交中", 0);
API.submitSaleTask({
id: data.id,
...parmas,
})
.then((res) => {
message.success("提交成功");
})
.catch((error: any) => {
message.error(error.message ?? "请求失败");
})
.finally(() => {
hide();
setParams({}, true);
});
|
a21e5b52
Shinner
增加零售任务分配菜单静态页面
|
137
138
|
};
|
aeeb3492
Shinner
增加预览任务功能
|
139
140
141
142
143
144
145
146
147
|
const handlePreviewTask = () => {
const params: any = {
id: data.id,
orderTaskApprovalType: OrderTaskApprovalType.门店维度,
};
setPreviewTaskParams(params);
setEtpVisible(true);
};
|
bdad4eb5
Shinner
调试自动分配接口
|
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
// 销顾任务
const showAdviserModal = (
record: API.TaskListItem,
type: OrderTaskApprovalType
) => {
const params: any = {
id: data.id,
taskId: record.id,
orderTaskApprovalType: OrderTaskApprovalType.门店维度, // 只有门店有查看销顾任务
};
switch (type) {
case OrderTaskApprovalType.门店维度:
params.shopId = record.dataId;
break;
case OrderTaskApprovalType.销售顾问维度:
params.staffId = record.dataId;
break;
case OrderTaskApprovalType.新车一级管理维度:
params.firstManageId = record.dataId;
break;
case OrderTaskApprovalType.新车二级管理维度:
params.secondManageId = record.dataId;
break;
case OrderTaskApprovalType.新车三级管理维度:
params.thirdManageId = record.dataId;
break;
default:
break;
}
setAdviserTaskParams(params);
setAtpVisible(true);
};
// 销顾任务--查看车系任务
const showSeriesModalByAdviser = (record: API.TaskListItem) => {
const params = { ...adviserTaskParams } as any;
params.taskId = record.id;
params.orderTaskApprovalType = OrderTaskApprovalType.车系;
params.staffId = record.dataId;
setSeriesTaskParams(params);
setStpVisible(true);
};
// 车系任务
const showSeriesModal = (
record: API.TaskListItem,
type: OrderTaskApprovalType
) => {
const params: any = {
id: data.id,
taskId: record.id,
orderTaskApprovalType: OrderTaskApprovalType.车系,
};
switch (type) {
case OrderTaskApprovalType.门店维度:
params.shopId = record.dataId;
break;
case OrderTaskApprovalType.销售顾问维度:
params.staffId = record.dataId;
break;
case OrderTaskApprovalType.新车一级管理维度:
params.firstManageId = record.dataId;
break;
case OrderTaskApprovalType.新车二级管理维度:
params.secondManageId = record.dataId;
break;
case OrderTaskApprovalType.新车三级管理维度:
params.thirdManageId = record.dataId;
break;
default:
break;
}
setSeriesTaskParams(params);
setStpVisible(true);
};
|
a60f9f4a
Shinner
调试批量设置接口
|
224
225
226
227
228
229
230
231
232
|
const handleAutoAssignRefresh = () => {
setAutoVisible(false);
setParams({}, true);
};
const handleBatchSetRefresh = () => {
setBatchVisible(false);
setParams({}, true);
};
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
233
234
235
|
const columns: ColumnsType<API.ShopTaskItem> = [
{
title: "门店",
|
d0ec8e16
Shinner
二级表头
|
236
|
width: 150,
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
237
238
239
240
|
dataIndex: "shopName",
},
{
title: "零售任务(台)",
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
|
children: [
{
title: "合计",
dataIndex: "taskCount",
key: "taskCount",
},
{
title: "新能源车",
dataIndex: "newEnergyTaskCount",
key: "newEnergyTaskCount",
},
{
title: "传统燃油车",
dataIndex: "fuelVehicleTaskCount",
key: "fuelVehicleTaskCount",
},
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
257
258
259
|
],
},
{
|
d0ec8e16
Shinner
二级表头
|
260
|
title: "毛利任务(元)",
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
261
262
|
children: [
{
|
d0ec8e16
Shinner
二级表头
|
263
264
265
266
267
268
269
270
|
title: "合计",
dataIndex: "grossProfitTaskTotal",
key: "grossProfitTaskTotal",
render: (text: string, record: API.ShopTaskItem) => {
return (record.taskCount * record.vehicleGrossProfitTask).toFixed(
2
);
},
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
271
272
|
},
{
|
d0ec8e16
Shinner
二级表头
|
273
274
275
|
title: "单车",
dataIndex: "vehicleGrossProfitTask",
key: "vehicleGrossProfitTask",
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
276
277
278
279
|
},
],
},
{
|
d0ec8e16
Shinner
二级表头
|
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
|
title: "线索到店成交(台)",
width: 100,
dataIndex: "clueDealTaskCount",
key: "clueDealTaskCount",
},
{
title: "首客试驾成交(台)",
width: 100,
dataIndex: "testDriveTaskCount",
key: "testDriveTaskCount",
},
{
title: "攻坚车任务(台)",
width: 100,
dataIndex: "tackCarTaskCount",
key: "tackCarTaskCount",
},
{
title: "车系任务(台)",
width: 100,
dataIndex: "seriesTaskCount",
key: "seriesTaskCount",
},
{
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
|
title: "销顾任务",
render: (text: string, record: API.ShopTaskItem) => {
return (
<a
onClick={() => {
goToAdviserPage(record);
}}
>
查看
</a>
);
},
},
{
title: "操作",
render: (text: string, record: API.ShopTaskItem) => {
return (
<a
onClick={() => {
goToEditPage(record);
}}
>
{isReadOnly ? "查看" : "编辑"}
</a>
);
},
},
];
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
333
334
335
|
return (
<PageHeaderWrapper title="零售任务分配">
<Card>
|
bdad4eb5
Shinner
调试自动分配接口
|
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
|
<Row
align="middle"
justify="space-between"
style={{ marginBottom: 20 }}
>
<Row align="middle" justify="start" style={{ marginBottom: 20 }}>
<DatePicker
placeholder="月度"
style={{ width: 260 }}
picker="month"
value={targetMonth}
onChange={handleChangeMonth}
allowClear={false}
/>
<Input.Search
allowClear
placeholder="门店名称"
style={{ width: 260, marginLeft: 15 }}
onSearch={(v) => {
setParams({ shopName: v }, true);
}}
/>
</Row>
{!isReadOnly && (
<Row align="middle" justify="start" style={{ marginBottom: 20 }}>
<Button type="primary" onClick={() => setAutoVisible(true)}>
零售任务快捷分配
</Button>
<Button
type="primary"
style={{ marginLeft: 10 }}
onClick={() => setBatchVisible(true)}
>
批量设置
</Button>
</Row>
)}
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
373
374
375
|
</Row>
<Table
rowKey="id"
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
376
|
bordered
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
377
|
loading={loading}
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
378
|
columns={columns}
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
379
380
|
dataSource={data.shopTaskList}
pagination={false}
|
df7d79e7
Shinner
调试零售任务分配接口
|
381
|
scroll={{ y: 450 }}
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
382
|
summary={() => {
|
a21e5b52
Shinner
增加零售任务分配菜单静态页面
|
383
384
385
|
if (!data || !data.shopTaskList || data.shopTaskList.length <= 0) {
return null;
}
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
386
387
388
389
390
391
392
393
394
|
return (
<Table.Summary fixed="bottom">
<Table.Summary.Row
style={{
background: "#FAFAFA",
fontSize: 18,
fontWeight: 500,
}}
>
|
bdad4eb5
Shinner
调试自动分配接口
|
395
396
|
<Table.Summary.Cell index={1}>合计</Table.Summary.Cell>
<Table.Summary.Cell index={2}>
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
397
398
|
{data.totalTaskCount}
</Table.Summary.Cell>
|
bdad4eb5
Shinner
调试自动分配接口
|
399
|
<Table.Summary.Cell index={3}>
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
400
401
|
{data.newEnergyTaskCount}
</Table.Summary.Cell>
|
bdad4eb5
Shinner
调试自动分配接口
|
402
|
<Table.Summary.Cell index={4}>
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
403
404
|
{data.fuelVehicleTaskCount}
</Table.Summary.Cell>
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
405
406
|
<Table.Summary.Cell index={5}>-</Table.Summary.Cell>
<Table.Summary.Cell index={6}>-</Table.Summary.Cell>
|
bdad4eb5
Shinner
调试自动分配接口
|
407
|
<Table.Summary.Cell index={7}>
|
eb77f47f
Shinner
增加表单交互
|
408
|
{data.clueDealTaskCount}
|
11ea8143
Shinner
调试零售任务分配接口
|
409
|
</Table.Summary.Cell>
|
bdad4eb5
Shinner
调试自动分配接口
|
410
|
<Table.Summary.Cell index={8}>
|
eb77f47f
Shinner
增加表单交互
|
411
412
|
{data.testDriveTaskCount}
</Table.Summary.Cell>
|
bdad4eb5
Shinner
调试自动分配接口
|
413
|
<Table.Summary.Cell index={9}>
|
4ddb4140
Shinner
调试零售任务分配接口
|
414
|
{data.tackCarTaskCount}
|
11ea8143
Shinner
调试零售任务分配接口
|
415
|
</Table.Summary.Cell>
|
bdad4eb5
Shinner
调试自动分配接口
|
416
|
<Table.Summary.Cell index={10}>
|
eb77f47f
Shinner
增加表单交互
|
417
418
|
{data.seriesTaskCount}
</Table.Summary.Cell>
|
bdad4eb5
Shinner
调试自动分配接口
|
419
420
|
<Table.Summary.Cell index={11} />
<Table.Summary.Cell index={12} />
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
421
422
423
424
|
</Table.Summary.Row>
</Table.Summary>
);
}}
|
02999d30
Shinner
零售任务分配入口列表二级表头
|
425
|
/>
|
df7d79e7
Shinner
调试零售任务分配接口
|
426
|
{data.revoke ? (
|
d24e7d31
Shinner
增加零售任务分配菜单静态页面
|
427
|
<Row align="middle" justify="center" style={{ marginTop: 50 }}>
|
df7d79e7
Shinner
调试零售任务分配接口
|
428
429
430
431
432
433
434
435
|
<Button onClick={cancelSaleTask}>撤销</Button>
<Button
type="primary"
style={{ marginLeft: 10 }}
onClick={viewProcess}
>
审批进度
</Button>
|
aeeb3492
Shinner
增加预览任务功能
|
436
437
438
439
440
441
442
|
<Button
type="primary"
style={{ marginLeft: 10 }}
onClick={handlePreviewTask}
>
预览任务
</Button>
|
df7d79e7
Shinner
调试零售任务分配接口
|
443
444
|
</Row>
) : (
|
4c5bad19
Shinner
预览任务按钮显示与是否审批无关;调整样式
|
445
446
|
<Row align="middle" justify="center" style={{ marginTop: 50 }}>
{!isReadOnly && (
|
4d0d5719
Shinner
提交审批增加备注和附件提交
|
447
|
<Button type="primary" onClick={() => setApproveOpen(true)}>
|
d24e7d31
Shinner
增加零售任务分配菜单静态页面
|
448
|
提交审批
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
449
|
</Button>
|
4c5bad19
Shinner
预览任务按钮显示与是否审批无关;调整样式
|
450
451
452
453
454
455
456
457
458
|
)}
<Button
type="primary"
style={{ marginLeft: 10 }}
onClick={handlePreviewTask}
>
预览任务
</Button>
</Row>
|
d24e7d31
Shinner
增加零售任务分配菜单静态页面
|
459
|
)}
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
460
|
</Card>
|
a21e5b52
Shinner
增加零售任务分配菜单静态页面
|
461
|
<Modal
|
aeeb3492
Shinner
增加预览任务功能
|
462
463
464
465
|
width={1200}
title="预览任务"
open={etpVisible}
onCancel={() => setEtpVisible(false)}
|
a21e5b52
Shinner
增加零售任务分配菜单静态页面
|
466
467
468
|
destroyOnClose
footer={null}
>
|
aeeb3492
Shinner
增加预览任务功能
|
469
|
<EntryTaskPreview
|
604e7e51
Shinner
预览任务增加门店和顾问搜索
|
470
|
month={targetMonth}
|
aeeb3492
Shinner
增加预览任务功能
|
471
|
params={previewTaskParams}
|
bdad4eb5
Shinner
调试自动分配接口
|
472
473
|
showAdviserModal={showAdviserModal}
showSeriesModal={showSeriesModal}
|
aeeb3492
Shinner
增加预览任务功能
|
474
475
476
477
478
479
480
481
482
483
484
485
|
/>
</Modal>
<Modal
width={1200}
title="销顾任务"
open={atpVisible}
onCancel={() => setAtpVisible(false)}
destroyOnClose
footer={null}
>
<AdviserTaskPreview
params={adviserTaskParams}
|
bdad4eb5
Shinner
调试自动分配接口
|
486
|
showSeriesModal={showSeriesModalByAdviser}
|
aeeb3492
Shinner
增加预览任务功能
|
487
488
489
490
491
492
493
494
495
496
497
|
/>
</Modal>
<Modal
width={600}
title="车系任务"
open={stpVisible}
onCancel={() => setStpVisible(false)}
destroyOnClose
footer={null}
>
<SeriesTaskPreview params={seriesTaskParams} />
|
a21e5b52
Shinner
增加零售任务分配菜单静态页面
|
498
|
</Modal>
|
bdad4eb5
Shinner
调试自动分配接口
|
499
500
501
502
|
<Modal
width={800}
title="零售任务快捷分配"
open={autoVisible}
|
90c2447f
Shinner
零售任务快捷分配交互优化
|
503
|
onCancel={() => setAutoVisible(false)}
|
bdad4eb5
Shinner
调试自动分配接口
|
504
505
|
destroyOnClose
footer={null}
|
a60f9f4a
Shinner
调试批量设置接口
|
506
|
maskClosable={false}
|
bdad4eb5
Shinner
调试自动分配接口
|
507
508
509
510
|
>
<SaleTaskAutoAssign
id={data.id}
value={data.shopTaskList}
|
90c2447f
Shinner
零售任务快捷分配交互优化
|
511
|
onCancel={() => setAutoVisible(false)}
|
a60f9f4a
Shinner
调试批量设置接口
|
512
|
onRefresh={handleAutoAssignRefresh}
|
bdad4eb5
Shinner
调试自动分配接口
|
513
514
515
516
517
518
|
/>
</Modal>
<Modal
width={800}
title="批量设置"
open={batchVisible}
|
90c2447f
Shinner
零售任务快捷分配交互优化
|
519
|
onCancel={() => setBatchVisible(false)}
|
bdad4eb5
Shinner
调试自动分配接口
|
520
521
|
destroyOnClose
footer={null}
|
a60f9f4a
Shinner
调试批量设置接口
|
522
|
maskClosable={false}
|
bdad4eb5
Shinner
调试自动分配接口
|
523
|
>
|
90c2447f
Shinner
零售任务快捷分配交互优化
|
524
525
526
527
528
|
<SaleTaskBatchSet
id={data.id}
onCancel={() => setBatchVisible(false)}
onRefresh={handleBatchSetRefresh}
/>
|
bdad4eb5
Shinner
调试自动分配接口
|
529
|
</Modal>
|
e26233dd
Shinner
更换审批进度组件
|
530
531
532
533
534
|
<ApprovalProgressModal
visible={approve.visible}
orderNo={approve.orderNo}
onCancel={() => setApprove({ visible: false, orderNo: "" })}
/>
|
4d0d5719
Shinner
提交审批增加备注和附件提交
|
535
536
537
538
539
|
<ApproveModal
callback={submitSaleTask}
open={approveOpen}
setOpen={setApproveOpen}
/>
|
32942bc1
Shinner
增加零售任务分配菜单静态页面
|
540
541
542
|
</PageHeaderWrapper>
);
}
|