import React, { useEffect, useRef, useState } from "react"; import { Table, Row, Input, Modal, Button, message } from "antd"; import { useStore } from "../../../store"; import * as API from "../../../api"; import AdviserTaskEdit from "./AdviserTaskEdit"; import { history, useRequest } from "umi"; import { cloneDeep } from "lodash"; import { ColumnsType } from "antd/es/table"; interface AdviserTaskEditForm { submit: (callback: (data: any) => void) => void; } interface AdviserTaskProps { form: any; } export default function AdviserTask({ form }: AdviserTaskProps) { const adviserTaskEditRef = useRef(null); const { shopTaskItem, isReadOnly, setShopTaskItem, editAdviser, setEditAdviser, } = useStore(); const [advisersFiltered, setAdvisersFiltered] = useState( [] ); const [visible, setVisible] = useState(false); const saveShopSaleTaskHook = useRequest(API.saveShopSaleTask, { manual: true, throwOnError: true, }); // 用于顾问前端搜索 useEffect(() => { setAdvisersFiltered(shopTaskItem?.staffTaskList ?? []); }, [shopTaskItem]); const filterByAdviserName = (value: string) => { const list = (shopTaskItem?.staffTaskList ?? []).filter( (item: any) => item.staffName.indexOf(value) !== -1 ); setAdvisersFiltered(list); }; // 前端更新编辑后的顾问分配任务 const onOk = () => { adviserTaskEditRef.current?.submit((newTask) => { setShopTaskItem(newTask); setAdvisersFiltered(newTask?.staffTaskList); // 刷新列表 setVisible(false); }); }; const handleGoBack = () => { history.goBack(); // todo 提示是否有未保存的修改 }; const handleSaveTask = async () => { const shopFormValue = form.getFieldsValue(); const { taskId, ...other } = shopTaskItem!; // 因为门店零售任务分配表格数据填写时未修改 store saveShopSaleTaskHook .run({ ...other, id: taskId, ...shopFormValue }) .then(() => { message.success("保存草稿成功"); }) .catch((error: any) => { message.error(error.message ?? "请求失败"); }); }; const columns: ColumnsType = [ { 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 ( { setEditAdviser(cloneDeep(record)); // 注意对象引用 setVisible(true); }} > 编辑 ); }, }, ]; return ( <> {!isReadOnly && ( )} setVisible(false)} maskClosable={false} keyboard={false} destroyOnClose > {/* @ts-ignore */} ); }