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
|
</>
);
}
|