import React, { useState, useEffect } from "react"; import { CheckCircleOutlined } from '@ant-design/icons'; import { Checkbox, Button, Form, Radio, InputNumber, Row, DatePicker, Select, message, Spin, Card, Divider, Typography, Space, } from "antd"; import useInitial from "@/hooks/useInitail"; import { getShopApi } from "@/common/api"; import CarSelect from "./CarSelect"; import { transformDTO, transformFormData } from "../../entity"; import { useStore } from "@/pages/mkt/ActivityCreate/index"; import { saveSalePromotionApi, saveScopeChangeApi, getSalePromotionDetail, fetchActivityCount, fetchCustomerCount, } from "../../api"; import _ from "lodash"; import TargetCustomer from "./TargetCustomer"; const { Option } = Select; function Index() { const [form] = Form.useForm(); const { baseInfo, readOnly, setJoinShops } = useStore(); const { bizType, activityNo, activityType, changeEnable } = baseInfo; const [disable, setDisable] = useState(false); const [JoinLimit, setGoalJoinLimit] = useState(); const [nonGoalLimit, setNonGoalLimit] = useState<{ nonGoalJoin?: boolean, publicity?: boolean }>({}); const { data, errMsg, loading } = useInitial( getSalePromotionDetail, {}, { activityNo, change: changeEnable } ); const { data: shopsList, setParams: setShopParams } = useInitial(getShopApi, [], { bizType }); const [saveLoading, setSaveLoading] = useState(false); const [count, setCount] = useState(); useEffect(() => { if (errMsg) { //接口未报错 return; } data.goalJoinLimit && setGoalJoinLimit(data.goalJoinLimit); setNonGoalLimit({ nonGoalJoin: data.nonGoalJoin, publicity: data.publicity }); const result = transformFormData(data, bizType, activityType); form.setFieldsValue({ ...result, }); setCount(undefined); }, [data, bizType]); useEffect(() => { bizType && setShopParams({ bizType }, true); }, [bizType]); /** 获取门店id */ function getShopIds() { const shopIds = form.getFieldValue("authShops")?.map( (item: { label: string; value: number; key: string }) => item.value ); return shopIds.join(","); } // 查看售前满足条件人数 function crmPersonCount(type: number, value: number) { const pa: ExternalPromotion.ActivityCountParams = { archivesState: type, minCarPurchaseIntention: value, }; const shopIds = getShopIds(); if (shopIds) { pa.shopIds = shopIds; pa.seriesIds = (form.getFieldValue("authCars") || []).map(item => item.seriesId).join(","); } fetchActivityCount(pa) .then((res) => { const { data } = res; setCount(data); }) .catch((err) => message.error(err.message)); } // 查看售后满足条件人数 function asCrmPersonCount(key: number) { let pa: ExternalPromotion.CustomerCountParams = {}; const shopIds = getShopIds(); if (shopIds) { pa.shopList = shopIds; } const keepType = form.getFieldValue("conditions")[key].afterConditionType; if (keepType === 2 || keepType === 4) { pa.type = keepType; } fetchCustomerCount(pa) .then((res) => { const { data } = res; setCount(data); }) .catch((err) => message.error(err.message)); } // 查看售后满足条件人数2(保有客) function asCrmPersonCount2(key: number, detail: any[], list: any[]) { let pa: ExternalPromotion.CustomerCountParams = {}; const shopIds = getShopIds(); if (shopIds) { pa.shopList = shopIds; } /** 限制条件选择结果 */ const conditionRes = form.getFieldValue("conditions")[key].andCondition; if (conditionRes === true || conditionRes === false) { pa.andCondition = conditionRes; } /** 保有客=》保有客 */ list.length && detail.length && detail.forEach((item) => { switch (item) { case 0: pa.arrivalMileage = `${list[0].mileageFrom},${list[0].mileageTo}`; break; case 1: pa.ageLimit = `${list[0].ageLimitForm},${list[0].ageLimitTo}`; break; case 2: pa.level = list[0].level; break; default: break; } }); fetchCustomerCount(pa) .then((res) => { const { data } = res; setCount(data); }) .catch((err) => message.error(err.message)); } /**保存表单数据*/ const _onOk = (values: any) => { form .validateFields() .then((fileds) => { const { conditions } = fileds; let res = true; if ( bizType === 2 && conditions[0].afterConditionType === 9 && conditions.length ) { res = conditions.some((item: any) => { if (item.mileageFrom) { if (!item.mileageTo) { message.error("请输入进展里程结束值", 2); return false; } else if (Number(item.mileageFrom) > Number(item.mileageTo)) { message.error("进站里程结束值不能小于起始值", 2); return false; } } if (item.ageLimitForm) { if (!item.ageLimitTo) { message.error("请输入车辆年限结束值", 2); return false; } else if (Number(item.ageLimitForm) > Number(item.ageLimitTo)) { message.error("车辆年限结束值不能小于起始值", 2); return false; } } return true; }); } if (res) { let result = transformDTO(fileds, bizType); // return; result.activityNo = activityNo; if (bizType === 2) { result.nonGoalJoin = false; } setSaveLoading(true); const currentApi = changeEnable ? saveScopeChangeApi : saveSalePromotionApi; currentApi(result).then((res) => { message.success("活动范围保存成功"); setJoinShops(fileds.authShops.map((item: { value: number }) => item.value).join(",")); }) .catch((error) => message.error(error.message)) .finally(() => setSaveLoading(false)); } }) .catch((err) => console.log(err.message)); }; //售前--》潜客: const renderBeforeSale = () => { return ( {(fields, { add, remove }) => ( <> {fields.map(({ key, name, ...restField }, index) => (

潜客:

智能评级≥ %
prevValues.conditions !== currentValues.conditions} > {({ getFieldValue }) => { const value = getFieldValue("conditions")[key].judgeValue; if (value != null) { return ( ); } }} {count !== undefined &&

客户数:{count}人

}
))} )}
); }; //售后--》流失预警线索 const renderLossWarningClue = (name: number, key: number) => { // 判断类型; return ( <>

流失预警线索展示:

截止 号前线索池中未成交的客户 {/* 查看档案数量按钮 */}
prevValues.conditions !== currentValues.conditions} > {({ getFieldValue }) => { const value = getFieldValue("conditions")[key].lossWarningClue; if (value) { return ( ); } }} {count !== undefined &&

客户数:{count}人

}
); }; // 售后==》续保线索 function renderRenewalClue(name: number, key: number) { return (

续保线索展示:

截止 号前线索池中未成交的客户 {/* 查看档案数量按钮 */}
prevValues.conditions !== currentValues.conditions} > {({ getFieldValue }) => { const value = getFieldValue("conditions")[key].renewalClue; if (value) { return ( ); } }} {count !== undefined &&

客户数:{count}人

}
); } /** * 售后--》 保有客 */ const renderAfterSale = () => { return ( <> {(fields, { add, remove }) => ( <> {fields.map(({ key, name, ...restField }, index) => { return (
{ setCount(undefined); }} > 流失预警线索 续保线索 保有客 prevValues.conditions !== currentValues.conditions} > {({ getFieldValue }) => { if ( getFieldValue("conditions")[key].afterConditionType ) { let value = getFieldValue("conditions")[key] .afterConditionType; let result = null; if (value === 2) { result = renderLossWarningClue(name, key); } if (value === 4) { result = renderRenewalClue(name, key); } if (value === 9) { // result = renderKeepGuest(name, key); result = renderKeepGuest(name, index); // index; } return result; } }}
); })} )}
); }; //售后--》 保有客 =》 保有客 const renderKeepGuest = (name: number, key: number) => { // 判断类型; return ( <> {/* 查看档案数量按钮 */}
prevValues.conditions !== currentValues.conditions} > {({ getFieldValue }) => { const list = form.getFieldValue("conditions"); const detail = getFieldValue("conditions")[key].detail; let res = null; list.length && detail && detail.length && detail.forEach((item) => { switch (item) { case 0: if ( list[0].mileageFrom != undefined && list[0].mileageTo != undefined ) { res = true; } else { res = false; } break; case 1: if ( list[0].ageLimitForm != undefined && list[0].ageLimitTo != undefined ) { res = true; } else { res = false; } break; case 2: if (list[0].level != undefined) { res = true; } else { res = false; } break; default: break; } }); if (res) { return ( ); } }} {count !== undefined &&

客户数:{count}人

}
); }; return ( <> {loading && (
加载中……
)} {errMsg &&
{errMsg || "加载错误"}
} {!loading && !errMsg && (
{bizType === 1 && ( 全部车辆 部分车辆 )} {/* 部分车辆*/} {bizType === 1 && ( prevValues.joinSeriesType !== currentValues.joinSeriesType} > {({ getFieldValue }) => (getFieldValue("joinSeriesType") === 2 ? ( ) : null)} )} {/* 选择业态之后,才能选择目标客户 */} {bizType && ( <>
*目标邀约客户:
{ setCount(undefined); if (e.target.value === 1) { setDisable(true); form.setFieldsValue({ nonGoalJoin: true, nonGoalBrowse: true }); } else { setDisable(false); form.setFieldsValue({ //售前 conditions: [ { judgeType: 2, bizType, customerType: bizType === 2 ? 3 : 2, }, ], }); } }} > 有具体活动邀约对象 无具体活动邀约对象
)} {bizType === 2 && ( prevValues.goalType !== currentValues.goalType} > {({ getFieldValue }) => (getFieldValue("goalType") === 2 ? renderAfterSale() : null)} )} {bizType === 1 && ( prevValues.goalType !== currentValues.goalType} > {({ getFieldValue }) => (getFieldValue("goalType") === 2 ? renderBeforeSale() : null)} )}
*活动报名资格:
{bizType !== 2 && ( prevValues.goalType !== currentValues.goalType} > {({ getFieldValue }) => (getFieldValue("goalType") === 2 ? ( { setGoalJoinLimit(v.target.value); if (v.target.value === 1) { form.setFieldsValue({ nonGoalJoin: false }); setDisable(true); } else { setDisable(false); } }} options={[ { label:
仅限截止活动发布时的目标客户
不含后续满足条件的目标客户)
, value: 1 }, { label:
符合条件的目标客户都可参加
后续满足条件的目标客户)
, value: 2 }, ]} />
) : null)}
)} {/* 滚动进池客户可享受外促政策 */} {bizType !== 2 && ( { if (v.target.checked) { form.setFieldsValue({ nonGoalBrowse: true }); } setNonGoalLimit({ ...nonGoalLimit, nonGoalJoin: v.target.checked }); }} > 非目标客户可享受外促政策 )}
*活动页面展示(C端---{'>'}霏车车小程序)
{ if (v.target.checked) { form.setFieldsValue({ nonGoalBrowse: true }); } setNonGoalLimit({ ...nonGoalLimit, publicity: v.target.checked }); }} > 在广告区展示
*车系详情中"查看优惠"页面展示活动信息
非目标客户可查看
)} ); } export default () => ;