Blame view

src/pages/order3/SaleTask/index.tsx 15.3 KB
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
          <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);
                }}
d8aedefd   Shinner   单个门店支持分配到门店和顾问
357
358
359
360
361
                onBlur={(e) => {
                  if (e.target.value.trim() === "") {
                    setParams({ shopName: "" }, true);
                  }
                }}
bdad4eb5   Shinner   调试自动分配接口
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
              />
            </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   增加零售任务分配菜单静态页面
378
379
380
          </Row>
          <Table
            rowKey="id"
02999d30   Shinner   零售任务分配入口列表二级表头
381
            bordered
32942bc1   Shinner   增加零售任务分配菜单静态页面
382
            loading={loading}
02999d30   Shinner   零售任务分配入口列表二级表头
383
            columns={columns}
32942bc1   Shinner   增加零售任务分配菜单静态页面
384
385
            dataSource={data.shopTaskList}
            pagination={false}
df7d79e7   Shinner   调试零售任务分配接口
386
            scroll={{ y: 450 }}
32942bc1   Shinner   增加零售任务分配菜单静态页面
387
            summary={() => {
a21e5b52   Shinner   增加零售任务分配菜单静态页面
388
389
390
              if (!data || !data.shopTaskList || data.shopTaskList.length <= 0) {
                return null;
              }
32942bc1   Shinner   增加零售任务分配菜单静态页面
391
392
393
394
395
396
397
398
399
              return (
                <Table.Summary fixed="bottom">
                  <Table.Summary.Row
                    style={{
                      background: "#FAFAFA",
                      fontSize: 18,
                      fontWeight: 500,
                    }}
                  >
bdad4eb5   Shinner   调试自动分配接口
400
401
                    <Table.Summary.Cell index={1}>合计</Table.Summary.Cell>
                    <Table.Summary.Cell index={2}>
32942bc1   Shinner   增加零售任务分配菜单静态页面
402
403
                      {data.totalTaskCount}
                    </Table.Summary.Cell>
bdad4eb5   Shinner   调试自动分配接口
404
                    <Table.Summary.Cell index={3}>
32942bc1   Shinner   增加零售任务分配菜单静态页面
405
406
                      {data.newEnergyTaskCount}
                    </Table.Summary.Cell>
bdad4eb5   Shinner   调试自动分配接口
407
                    <Table.Summary.Cell index={4}>
32942bc1   Shinner   增加零售任务分配菜单静态页面
408
409
                      {data.fuelVehicleTaskCount}
                    </Table.Summary.Cell>
02999d30   Shinner   零售任务分配入口列表二级表头
410
                    <Table.Summary.Cell index={5}>-</Table.Summary.Cell>
d8aedefd   Shinner   单个门店支持分配到门店和顾问
411
412
413
                    <Table.Summary.Cell index={6}>
                      {data.totalGrossProfitTask}
                    </Table.Summary.Cell>
bdad4eb5   Shinner   调试自动分配接口
414
                    <Table.Summary.Cell index={7}>
eb77f47f   Shinner   增加表单交互
415
                      {data.clueDealTaskCount}
11ea8143   Shinner   调试零售任务分配接口
416
                    </Table.Summary.Cell>
bdad4eb5   Shinner   调试自动分配接口
417
                    <Table.Summary.Cell index={8}>
eb77f47f   Shinner   增加表单交互
418
419
                      {data.testDriveTaskCount}
                    </Table.Summary.Cell>
bdad4eb5   Shinner   调试自动分配接口
420
                    <Table.Summary.Cell index={9}>
4ddb4140   Shinner   调试零售任务分配接口
421
                      {data.tackCarTaskCount}
11ea8143   Shinner   调试零售任务分配接口
422
                    </Table.Summary.Cell>
bdad4eb5   Shinner   调试自动分配接口
423
                    <Table.Summary.Cell index={10}>
eb77f47f   Shinner   增加表单交互
424
425
                      {data.seriesTaskCount}
                    </Table.Summary.Cell>
bdad4eb5   Shinner   调试自动分配接口
426
427
                    <Table.Summary.Cell index={11} />
                    <Table.Summary.Cell index={12} />
32942bc1   Shinner   增加零售任务分配菜单静态页面
428
429
430
431
                  </Table.Summary.Row>
                </Table.Summary>
              );
            }}
02999d30   Shinner   零售任务分配入口列表二级表头
432
          />
df7d79e7   Shinner   调试零售任务分配接口
433
          {data.revoke ? (
d24e7d31   Shinner   增加零售任务分配菜单静态页面
434
            <Row align="middle" justify="center" style={{ marginTop: 50 }}>
df7d79e7   Shinner   调试零售任务分配接口
435
436
437
438
439
440
441
442
              <Button onClick={cancelSaleTask}>撤销</Button>
              <Button
                type="primary"
                style={{ marginLeft: 10 }}
                onClick={viewProcess}
              >
                审批进度
              </Button>
aeeb3492   Shinner   增加预览任务功能
443
444
445
446
447
448
449
              <Button
                type="primary"
                style={{ marginLeft: 10 }}
                onClick={handlePreviewTask}
              >
                预览任务
              </Button>
df7d79e7   Shinner   调试零售任务分配接口
450
451
            </Row>
          ) : (
4c5bad19   Shinner   预览任务按钮显示与是否审批无关;调整样式
452
453
            <Row align="middle" justify="center" style={{ marginTop: 50 }}>
              {!isReadOnly && (
4d0d5719   Shinner   提交审批增加备注和附件提交
454
                <Button type="primary" onClick={() => setApproveOpen(true)}>
d24e7d31   Shinner   增加零售任务分配菜单静态页面
455
                  提交审批
32942bc1   Shinner   增加零售任务分配菜单静态页面
456
                </Button>
4c5bad19   Shinner   预览任务按钮显示与是否审批无关;调整样式
457
458
459
460
461
462
463
464
465
              )}
              <Button
                type="primary"
                style={{ marginLeft: 10 }}
                onClick={handlePreviewTask}
              >
                预览任务
              </Button>
            </Row>
d24e7d31   Shinner   增加零售任务分配菜单静态页面
466
          )}
32942bc1   Shinner   增加零售任务分配菜单静态页面
467
        </Card>
a21e5b52   Shinner   增加零售任务分配菜单静态页面
468
        <Modal
aeeb3492   Shinner   增加预览任务功能
469
470
471
472
          width={1200}
          title="预览任务"
          open={etpVisible}
          onCancel={() => setEtpVisible(false)}
a21e5b52   Shinner   增加零售任务分配菜单静态页面
473
474
475
          destroyOnClose
          footer={null}
        >
aeeb3492   Shinner   增加预览任务功能
476
          <EntryTaskPreview
604e7e51   Shinner   预览任务增加门店和顾问搜索
477
            month={targetMonth}
aeeb3492   Shinner   增加预览任务功能
478
            params={previewTaskParams}
bdad4eb5   Shinner   调试自动分配接口
479
480
            showAdviserModal={showAdviserModal}
            showSeriesModal={showSeriesModal}
aeeb3492   Shinner   增加预览任务功能
481
482
483
484
485
486
487
488
489
490
491
492
          />
        </Modal>
        <Modal
          width={1200}
          title="销顾任务"
          open={atpVisible}
          onCancel={() => setAtpVisible(false)}
          destroyOnClose
          footer={null}
        >
          <AdviserTaskPreview
            params={adviserTaskParams}
bdad4eb5   Shinner   调试自动分配接口
493
            showSeriesModal={showSeriesModalByAdviser}
aeeb3492   Shinner   增加预览任务功能
494
495
496
497
498
499
500
501
502
503
504
          />
        </Modal>
        <Modal
          width={600}
          title="车系任务"
          open={stpVisible}
          onCancel={() => setStpVisible(false)}
          destroyOnClose
          footer={null}
        >
          <SeriesTaskPreview params={seriesTaskParams} />
a21e5b52   Shinner   增加零售任务分配菜单静态页面
505
        </Modal>
bdad4eb5   Shinner   调试自动分配接口
506
507
508
509
        <Modal
          width={800}
          title="零售任务快捷分配"
          open={autoVisible}
90c2447f   Shinner   零售任务快捷分配交互优化
510
          onCancel={() => setAutoVisible(false)}
bdad4eb5   Shinner   调试自动分配接口
511
512
          destroyOnClose
          footer={null}
a60f9f4a   Shinner   调试批量设置接口
513
          maskClosable={false}
bdad4eb5   Shinner   调试自动分配接口
514
515
516
517
        >
          <SaleTaskAutoAssign
            id={data.id}
            value={data.shopTaskList}
90c2447f   Shinner   零售任务快捷分配交互优化
518
            onCancel={() => setAutoVisible(false)}
a60f9f4a   Shinner   调试批量设置接口
519
            onRefresh={handleAutoAssignRefresh}
bdad4eb5   Shinner   调试自动分配接口
520
521
522
523
524
525
          />
        </Modal>
        <Modal
          width={800}
          title="批量设置"
          open={batchVisible}
90c2447f   Shinner   零售任务快捷分配交互优化
526
          onCancel={() => setBatchVisible(false)}
bdad4eb5   Shinner   调试自动分配接口
527
528
          destroyOnClose
          footer={null}
a60f9f4a   Shinner   调试批量设置接口
529
          maskClosable={false}
bdad4eb5   Shinner   调试自动分配接口
530
        >
90c2447f   Shinner   零售任务快捷分配交互优化
531
532
533
534
535
          <SaleTaskBatchSet
            id={data.id}
            onCancel={() => setBatchVisible(false)}
            onRefresh={handleBatchSetRefresh}
          />
bdad4eb5   Shinner   调试自动分配接口
536
        </Modal>
e26233dd   Shinner   更换审批进度组件
537
538
539
540
541
        <ApprovalProgressModal
          visible={approve.visible}
          orderNo={approve.orderNo}
          onCancel={() => setApprove({ visible: false, orderNo: "" })}
        />
4d0d5719   Shinner   提交审批增加备注和附件提交
542
543
544
545
546
        <ApproveModal
          callback={submitSaleTask}
          open={approveOpen}
          setOpen={setApproveOpen}
        />
32942bc1   Shinner   增加零售任务分配菜单静态页面
547
548
549
      </PageHeaderWrapper>
    );
  }