Blame view

src/pages/order3/SaleTask/subpages/TaskEdit/components/AdviserTask.tsx 5.43 KB
1aa6dd0a   Shinner   调试零售任务分配接口
1
2
  import React, { useEffect, useRef, useState } from "react";
  import { Table, Row, Input, Modal, Button, message } from "antd";
d24e7d31   Shinner   增加零售任务分配菜单静态页面
3
  import { useStore } from "../../../store";
32942bc1   Shinner   增加零售任务分配菜单静态页面
4
  import * as API from "../../../api";
3b0d1ee6   Shinner   增加零售任务分配菜单静态页面
5
  import AdviserTaskEdit from "./AdviserTaskEdit";
1aa6dd0a   Shinner   调试零售任务分配接口
6
  import { history, useRequest } from "umi";
263b8790   Shinner   优化分配任务前端数据更新逻辑
7
  import { cloneDeep } from "lodash";
d0ec8e16   Shinner   二级表头
8
  import { ColumnsType } from "antd/es/table";
32942bc1   Shinner   增加零售任务分配菜单静态页面
9
  
1aa6dd0a   Shinner   调试零售任务分配接口
10
11
12
13
  interface AdviserTaskEditForm {
    submit: (callback: (data: any) => void) => void;
  }
  
a8fb2c8c   Shinner   优化销顾任务保存草稿逻辑
14
15
16
17
18
  interface AdviserTaskProps {
    form: any;
  }
  
  export default function AdviserTask({ form }: AdviserTaskProps) {
1aa6dd0a   Shinner   调试零售任务分配接口
19
    const adviserTaskEditRef = useRef<AdviserTaskEditForm>(null);
263b8790   Shinner   优化分配任务前端数据更新逻辑
20
21
22
23
24
25
26
    const {
      shopTaskItem,
      isReadOnly,
      setShopTaskItem,
      editAdviser,
      setEditAdviser,
    } = useStore();
3b0d1ee6   Shinner   增加零售任务分配菜单静态页面
27
28
    const [advisersFiltered, setAdvisersFiltered] = useState<API.StaffTaskItem[]>(
      []
263b8790   Shinner   优化分配任务前端数据更新逻辑
29
    );
3b0d1ee6   Shinner   增加零售任务分配菜单静态页面
30
    const [visible, setVisible] = useState(false);
1aa6dd0a   Shinner   调试零售任务分配接口
31
32
    const saveShopSaleTaskHook = useRequest(API.saveShopSaleTask, {
      manual: true,
436c6c9d   Shinner   报错显示后端提示信息
33
      throwOnError: true,
1aa6dd0a   Shinner   调试零售任务分配接口
34
35
    });
  
263b8790   Shinner   优化分配任务前端数据更新逻辑
36
    // 用于顾问前端搜索
3b0d1ee6   Shinner   增加零售任务分配菜单静态页面
37
38
39
40
41
42
43
44
45
46
    useEffect(() => {
      setAdvisersFiltered(shopTaskItem?.staffTaskList ?? []);
    }, [shopTaskItem]);
  
    const filterByAdviserName = (value: string) => {
      const list = (shopTaskItem?.staffTaskList ?? []).filter(
        (item: any) => item.staffName.indexOf(value) !== -1
      );
      setAdvisersFiltered(list);
    };
d24e7d31   Shinner   增加零售任务分配菜单静态页面
47
  
1aa6dd0a   Shinner   调试零售任务分配接口
48
    // 前端更新编辑后的顾问分配任务
367856c2   Shinner   修复编辑顾问任务分配问题
49
50
    const onOk = () => {
      adviserTaskEditRef.current?.submit((newTask) => {
1aa6dd0a   Shinner   调试零售任务分配接口
51
        setShopTaskItem(newTask);
367856c2   Shinner   修复编辑顾问任务分配问题
52
        setAdvisersFiltered(newTask?.staffTaskList); // 刷新列表
1aa6dd0a   Shinner   调试零售任务分配接口
53
54
55
56
        setVisible(false);
      });
    };
  
1aa6dd0a   Shinner   调试零售任务分配接口
57
58
59
60
61
    const handleGoBack = () => {
      history.goBack(); // todo 提示是否有未保存的修改
    };
  
    const handleSaveTask = async () => {
a8fb2c8c   Shinner   优化销顾任务保存草稿逻辑
62
63
      const shopFormValue = form.getFieldsValue();
      const { taskId, ...other } = shopTaskItem!; // 因为门店零售任务分配表格数据填写时未修改 store
1aa6dd0a   Shinner   调试零售任务分配接口
64
      saveShopSaleTaskHook
a8fb2c8c   Shinner   优化销顾任务保存草稿逻辑
65
        .run({ ...other, id: taskId, ...shopFormValue })
1aa6dd0a   Shinner   调试零售任务分配接口
66
67
        .then(() => {
          message.success("保存草稿成功");
1aa6dd0a   Shinner   调试零售任务分配接口
68
69
70
71
72
73
        })
        .catch((error: any) => {
          message.error(error.message ?? "请求失败");
        });
    };
  
d0ec8e16   Shinner   二级表头
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
    const columns: ColumnsType<API.StaffTaskItem> = [
      {
        title: "销售顾问",
        width: 100,
        dataIndex: "staffName",
      },
      {
        title: "零售任务(台)",
        children: [
          {
            title: "合计",
            dataIndex: "taskCount",
            key: "taskCount",
          },
          {
            title: "新能源车",
            dataIndex: "newEnergyTaskCount",
            key: "newEnergyTaskCount",
          },
          {
            title: "传统燃油车",
            dataIndex: "fuelVehicleTaskCount",
            key: "fuelVehicleTaskCount",
          },
        ],
      },
      {
        title: "毛利任务(元)",
        children: [
          {
            title: "合计",
            dataIndex: "grossProfitTaskTotal",
            key: "grossProfitTaskTotal",
            render: (text: string, record: API.StaffTaskItem) => {
              return (record.taskCount * record.vehicleGrossProfitTask).toFixed(
                2
              );
            },
          },
          {
            title: "单车",
            dataIndex: "vehicleGrossProfitTask",
            key: "vehicleGrossProfitTask",
          },
        ],
      },
      {
        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",
      },
      {
        title: "操作",
        render: (text: string, record: API.StaffTaskItem) => {
          if (isReadOnly) return "-";
          return (
            <a
              onClick={() => {
                setEditAdviser(cloneDeep(record)); // 注意对象引用
                setVisible(true);
              }}
            >
              编辑
            </a>
          );
        },
      },
    ];
  
32942bc1   Shinner   增加零售任务分配菜单静态页面
162
163
164
165
166
    return (
      <>
        <Row
          align="middle"
          justify="start"
1aa6dd0a   Shinner   调试零售任务分配接口
167
          style={{ marginBottom: 20, marginTop: 14 }}
32942bc1   Shinner   增加零售任务分配菜单静态页面
168
        >
32942bc1   Shinner   增加零售任务分配菜单静态页面
169
170
171
172
          <Input.Search
            allowClear
            placeholder="顾问名称"
            style={{ width: 260, marginLeft: 15 }}
3b0d1ee6   Shinner   增加零售任务分配菜单静态页面
173
            onSearch={filterByAdviserName}
32942bc1   Shinner   增加零售任务分配菜单静态页面
174
175
          />
        </Row>
d24e7d31   Shinner   增加零售任务分配菜单静态页面
176
        <Table
d0ec8e16   Shinner   二级表头
177
          columns={columns}
367856c2   Shinner   修复编辑顾问任务分配问题
178
          dataSource={[...advisersFiltered]}
d24e7d31   Shinner   增加零售任务分配菜单静态页面
179
180
181
          pagination={false}
          rowKey="id"
          loading={false}
d0ec8e16   Shinner   二级表头
182
        />
1aa6dd0a   Shinner   调试零售任务分配接口
183
184
185
186
187
188
189
190
191
192
193
194
195
        <Row align="middle" justify="center" style={{ marginTop: 50 }}>
          <Button onClick={handleGoBack}>返回列表</Button>
          {!isReadOnly && (
            <Button
              type="primary"
              style={{ marginLeft: 10 }}
              loading={saveShopSaleTaskHook.loading}
              onClick={handleSaveTask}
            >
              保存草稿
            </Button>
          )}
        </Row>
3b0d1ee6   Shinner   增加零售任务分配菜单静态页面
196
197
        <Modal
          width={1200}
263b8790   Shinner   优化分配任务前端数据更新逻辑
198
          title={`当前选择顾问:${editAdviser?.staffName}`}
3b0d1ee6   Shinner   增加零售任务分配菜单静态页面
199
          open={visible}
367856c2   Shinner   修复编辑顾问任务分配问题
200
          onOk={onOk}
4ddb4140   Shinner   调试零售任务分配接口
201
          okText="确认"
263b8790   Shinner   优化分配任务前端数据更新逻辑
202
          onCancel={() => setVisible(false)}
3b0d1ee6   Shinner   增加零售任务分配菜单静态页面
203
204
205
          maskClosable={false}
          keyboard={false}
          destroyOnClose
3b0d1ee6   Shinner   增加零售任务分配菜单静态页面
206
        >
1aa6dd0a   Shinner   调试零售任务分配接口
207
          {/* @ts-ignore */}
263b8790   Shinner   优化分配任务前端数据更新逻辑
208
          <AdviserTaskEdit ref={adviserTaskEditRef} />
3b0d1ee6   Shinner   增加零售任务分配菜单静态页面
209
        </Modal>
32942bc1   Shinner   增加零售任务分配菜单静态页面
210
211
212
      </>
    );
  }