// 会员汇总统计 // 会员等级统计 import { ConnectState } from "@/models/connect"; import { connect, CurrentUser } from "umi"; import './MembershipLevelStatistics.less' import ProTable, { ActionType } from "@ant-design/pro-table"; import { useEffect, useRef, useState } from "react"; import { Button, Col, Drawer, FormInstance, Row, Spin, Tabs, Tooltip } from "antd"; import { handeGetNestingAUTOTYPEList, handeGetPointGrowthSummary, handleGetMEMBERGROWTHList, handleGetPOINTRECORDList } from "../service"; import moment from 'moment' import addIcon from '@/assets/detail/addIcon.png' import reduceIcon from '@/assets/detail/reduceIcon.png' import session from "@/utils/session"; import ProForm, { ProFormDateRangePicker, ProFormTreeSelect } from "@ant-design/pro-form"; import { handleSetlogSave } from "@/utils/format"; import PointsRecordSearch from "../PointsRecordSearch"; import GrowthValueRecordSearch from "../GrowthValueRecordSearch"; const MembershipLevelStatistics: React.FC<{ currentUser: CurrentUser | undefined }> = (props) => { const { currentUser } = props const actionRef = useRef(); const formRef = useRef(); const PointsRecordSearchRef = useRef(); const GrowthValueRecordSearchRef = useRef(); // 顶部内容的对象值 const [topData, setTopData] = useState() // 当前顶部的选择到了第几个 const [selectTab, setSelectTab] = useState(1) // 搜索参数 const [searchParams, setSearchParams] = useState({ StartDate: moment().startOf('M').format('YYYY-MM-DD'), EndDate: moment().format('YYYY-MM-DD') }) // 选择的大的tab const [selectBigTab, setSelectBigTab] = useState('1') // 大tab能切换的内容 const [tabList, setTabList] = useState([]) // 判断是不是第一次进入页面 const [isFirst, setIsFirst] = useState(true) // 数据的加载效果 const [topLoading, setTopLoading] = useState(false) // 当前选中的是第几个数据 const [currentIndex, setCurrentIndex] = useState() const [currentRow, setCurrentRow] = useState() // 抽屉显示的值 const [currentDrawerTitle, setCurrentDrawerTitle] = useState('') let SCORETYPETree = session.get('SCORETYPETree') let MEMBERSHIPLEVELYNObj = session.get('MEMBERSHIPLEVELYNObj') let MEMBERSHIPTYPEYNObj = session.get('MEMBERSHIPTYPEYNObj') // 主表隐藏的字段 const [columnsStateMap, setColumnsStateMap] = useState({ TotalPointQOQData: { show: false }, EarnPointQOQData: { show: false }, ConsumePointQOQData: { show: false }, TotalGrowthQOQData: { show: false }, EarnGrowthQOQData: { show: false }, ConsumeGrowthQOQData: { show: false }, }) // 显示详情抽屉 const [showDetail, setShowDetail] = useState(false) // 顶部的数组内容 const [topListData, setTopListData] = useState([]) // 传入给子组件的搜索内容 const [toChildrenSearchParams, setToChildrenSearchParams] = useState() // 积分的columns const columns: any = [ { title: '查询内容', dataIndex: 'searchText', hideInTable: true }, // { // title: '查询时间', // dataIndex: 'search_date', // valueType: 'dateRange', // hideInTable: true, // hideInDescriptions: true, // search: { // transform: (value: any) => { // return { // StartDate: value[0], // EndDate: value[1], // }; // }, // }, // initialValue: [moment().startOf('M').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')], // }, { title: "服务区名称", width: 150, dataIndex: "SERVERPART_NAME", hideInSearch: true, align: 'center', ellipsis: true, }, { title: "门店名称", width: 150, dataIndex: "SHOPNAME", hideInSearch: true, ellipsis: true, align: 'center', }, { title: "积分方式", width: 120, dataIndex: "POINT_TYPE", ellipsis: true, valueType: 'select', align: 'center', valueEnum: { "-2": "全部", "1": "累计", "-1": "消耗" }, initialValue: "-2" }, { title: "积分来源", width: 120, dataIndex: "POINT_SOURCE", ellipsis: true, valueType: 'treeSelect', align: 'center', request: () => { return SCORETYPETree } // valueEnum: { // "0": "全部", // "1000": "消费赠送", // "2000": "消费抵扣", // "3000": "注册赠送" // }, // initialValue: "0" }, { title: "本次积分", width: 120, dataIndex: "CURRENT_POINT", hideInSearch: true, ellipsis: true, align: 'center', valueType: "digit" }, { title: "累计积分", width: 120, dataIndex: "MEMBERSHIP_POINT", hideInSearch: true, ellipsis: true, align: 'center', valueType: "digit" }, { title: "获取时间", width: 150, dataIndex: "CREATE_DATE", hideInSearch: true, align: 'center', ellipsis: true, render: (_, record) => { return record?.CREATE_DATE ? moment(record?.CREATE_DATE).format('YYYY-MM-DD HH:mm:ss') : "-" } }, ] // 成长值的columns const growthColumns: any = [ { title: '查询内容', dataIndex: 'searchText', hideInTable: true }, // { // title: '查询时间', // dataIndex: 'search_date', // valueType: 'dateRange', // hideInTable: true, // hideInDescriptions: true, // search: { // transform: (value: any) => { // return { // StartDate: value[0], // EndDate: value[1], // }; // }, // }, // initialValue: [moment().startOf('M').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')], // }, { title: "服务区名称", width: 150, dataIndex: "SERVERPART_NAME", hideInSearch: true, align: 'center', ellipsis: true, }, { title: "门店名称", width: 150, dataIndex: "SHOPNAME", hideInSearch: true, align: 'center', ellipsis: true, }, { title: "会员昵称", width: 150, dataIndex: "MEMBERSHIP_NAME", hideInSearch: true, align: 'center', ellipsis: true, }, { title: "累计成长值", width: 120, dataIndex: "MEMBERSHIP_GROWTH", hideInSearch: true, align: 'center', ellipsis: true, valueType: 'digit' }, { title: "本次成长值", width: 120, dataIndex: "CURRENT_GROWTH", hideInSearch: true, align: 'center', ellipsis: true, valueType: 'digit' }, { title: "成长来源", width: 120, dataIndex: "GROWTH_SOURCE", align: 'center', ellipsis: true, valueType: 'treeSelect', request: () => { return SCORETYPETree }, fieldProps: { allowClear: true, // 允许清除已选中的值 treeDefaultExpandAll: true, // 默认展开所有节点(可选) showSearch: true, // 允许搜索(可选) treeNodeFilterProp: 'title', // 按 title 搜索(可选) } // valueEnum: { // "0": "全部", // "1000": "消费赠送", // "2000": "消费抵扣", // "3000": "注册赠送", // }, }, { title: "成长方式", width: 120, dataIndex: "GROWTH_TYPE", ellipsis: true, align: 'center', valueType: 'select', valueEnum: { "-2": "全部", "1": "积累", "-1": "消耗", }, initialValue: "-2" }, { title: "操作时间", width: 180, dataIndex: "OPERATE_DATE", align: 'center', hideInSearch: true, render: (_, record) => { return record?.OPERATE_DATE ? moment(record?.OPERATE_DATE).format('YYYY-MM-DD HH:mm:ss') : "-" } }, ] useEffect(() => { const initData = async () => { await handleGetTopData(); // 使用最新的selectBigTab值触发表格加载 // actionRef.current?.reload(); }; initData(); }, []) // 获取顶部的数据 const handleGetTopData = async (StartDate?: string, EndDate?: string, MEMBERSHIP_TARGET?: string) => { const req: any = { CalcType: 2, // 1 汇总 2 会员等级 3 会员类型 OwnerUnitId: currentUser?.OwnerUnitId, StartDate: StartDate ? StartDate : searchParams?.StartDate ? searchParams?.StartDate : "", EndDate: EndDate ? EndDate : searchParams?.EndDate ? searchParams?.EndDate : "", PointSource: "", ServerpartId: "", MemberShipId: "", MembershipType: "", MembershipLevel: "", MembershipTarget: MEMBERSHIP_TARGET || "" } setTopLoading(true) const data = await handeGetPointGrowthSummary(req) setTopLoading(false) console.log('datadatadatadatadata', data); let sumObj: any = data[0] setTopListData(data) setTopData(sumObj) let list: any = [] if (data && data.length > 0) { data.forEach((item: any) => { list.push({ label: item.StatisticalName && MEMBERSHIPLEVELYNObj && MEMBERSHIPLEVELYNObj[item.StatisticalName] ? MEMBERSHIPLEVELYNObj[item.StatisticalName.toString()] : "", value: item.StatisticalName, key: item.StatisticalName }) }) } console.log('listlistlistlist', list); // 使用函数形式的setState确保获取到最新值 return new Promise((resolve) => { setTabList(list); const newTabKey = list[0]?.key || '1'; setSelectBigTab(newTabKey); resolve(newTabKey); }); } // 改变顶部的选择 const handleChangeTab = (value: number) => { // 立即更新状态 setSelectTab(value); // 使用setTimeout确保状态更新后再触发表格重新加载 setTimeout(() => { actionRef.current?.reload(); }, 0); } // 判断当前是点击看哪个的详情 const handleShowDetail = (index: number, obj: any) => { setCurrentIndex(index) setCurrentRow(obj) let item: any = topListData[index] let type: string = obj.TotalPoint ? '总积分' : obj.EarnPoint ? '赚取积分' : obj.ConsumePoint ? '消耗积分' : obj.TotalGrowth ? '总成长值' : obj.EarnGrowth ? '赚取成长值' : obj.ConsumeGrowth ? '消耗成长值' : '' let typeTab: number = obj.TotalPoint ? 1 : obj.EarnPoint ? 2 : obj.ConsumePoint ? 3 : obj.TotalGrowth ? 4 : obj.EarnGrowth ? 5 : obj.ConsumeGrowth ? 6 : 0 console.log('typetypetype', type); setSelectTab(typeTab) let str: string = `${item.StatisticalName && MEMBERSHIPLEVELYNObj && MEMBERSHIPLEVELYNObj[item.StatisticalName] ? MEMBERSHIPLEVELYNObj[item.StatisticalName.toString()] : ""}${type}` setCurrentDrawerTitle(str) let req: any = {} // 确保使用最新的状态值 const currentTabValue = topListData[index].StatisticalName; if (typeTab <= 3) { req = { SearchParameter: { MEMBERSHIP_TYPE: currentTabValue || "", // PROVINCE_CODE: currentUser?.ProvinceCode || "", OPERATE_DATE_Start: searchParams?.StartDate || "", OPERATE_DATE_End: searchParams?.EndDate || "", OWNERUNIT_ID: 911, POINT_TYPE: typeTab === 1 ? '' : typeTab === 2 ? '1' : typeTab === 3 ? '-1' : '', POINT_SOURCE: '' }, keyWord: { Key: "MEMBERSHIP_NAME", Value: searchParams?.searchText || "" }, PageIndex: searchParams?.current, PageSize: 20, sortstr: "OPERATE_DATE desc", } } else { req = { searchParameter: { // PROVINCE_CODE: currentUser?.ProvinceCode || "", OPERATE_DATE_Start: searchParams?.StartDate || "", OPERATE_DATE_End: searchParams?.EndDate || "", OWNERUNIT_ID: 911, SCORESETTING_STATE: 1, GROWTH_SOURCES: "", GROWTH_TYPE: typeTab === 4 ? '' : typeTab === 5 ? '1' : typeTab === 6 ? '-1' : '' }, PageIndex: searchParams?.current, PageSize: 20, sortstr: "OPERATE_DATE desc", keyWord: { Key: "MEMBERSHIP_NAME", Value: searchParams?.searchText || "" }, } } setToChildrenSearchParams(req) setShowDetail(true) } return (
{/* { // 立即更新状态,确保UI立即响应 setSelectBigTab(e); // 使用setTimeout确保状态更新后再触发表格重新加载 setTimeout(() => { actionRef.current?.reload(); }, 0); }} items={tabList} /> */} { topLoading ?
加载中...
: '' }
{ console.log('values', values); let [StartDate, EndDate] = ['', ''] if (values.searchTime && values.searchTime.length > 0) { [StartDate, EndDate] = values.searchTime } handleGetTopData(StartDate, EndDate, values.MEMBERSHIP_TARGET) setSearchParams({ StartDate: StartDate, EndDate: EndDate }) actionRef.current?.reload() }} > { const req = { AUTOTYPE_TYPEID: '2000', AUTOTYPE_PID: "", OWNERUNIT_ID: currentUser?.OwnerUnitId, AUTOTYPE_VALID: 1, SearchKey: "" } const data = await handeGetNestingAUTOTYPEList(req); console.log('datadatadatadatadata', data); return data }} fieldProps={{ allowClear: true, showSearch: true, filterTreeNode: (input, node) => { // ✅ 输入时根据 AUTOTYPE_NAME 模糊匹配 return node?.AUTOTYPE_NAME?.toLowerCase()?.includes(input.toLowerCase()); }, treeDefaultExpandAll: true, fieldNames: { label: 'AUTOTYPE_NAME', value: 'AUTOTYPE_ID', } }} />
{ topListData && topListData.length > 0 ? topListData.map((item: any, index: number) => { return
{item.StatisticalName && MEMBERSHIPLEVELYNObj && MEMBERSHIPLEVELYNObj[item.StatisticalName] ? MEMBERSHIPLEVELYNObj[item.StatisticalName.toString()] : ""}
{ handleShowDetail(index, { TotalPoint: item?.TotalPoint }) }}>
总积分
{item && item?.TotalPoint ? item?.TotalPoint.summaryData : "-"}
环比增长 { item && item?.TotalPoint && item?.TotalPoint.QOQData && item?.TotalPoint.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { item && item?.TotalPoint && item?.TotalPoint.QOQData && item?.TotalPoint.summaryData ? // {item && item?.TotalPoint ? item?.TotalPoint.QOQData : "-"} {(((item?.TotalPoint.summaryData - item?.TotalPoint.QOQData) / item?.TotalPoint.QOQData) * 100).toFixed(2) + '%'} : "-" }
{ handleShowDetail(index, { EarnPoint: item?.EarnPoint }) }}>
赚取积分
{item && item?.EarnPoint ? item?.EarnPoint.summaryData : "-"}
环比增长 { item && item?.EarnPoint && item?.EarnPoint.QOQData && item?.EarnPoint.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { item && item?.EarnPoint && item?.EarnPoint.QOQData && item?.EarnPoint.summaryData ? // {item && item?.EarnPoint ? item?.EarnPoint.QOQData : "-"} {(((item?.EarnPoint.summaryData - item?.EarnPoint.QOQData) / item?.EarnPoint.QOQData) * 100).toFixed(2) + '%'} : "" }
{/*
*/}
{ handleShowDetail(index, { ConsumePoint: item?.ConsumePoint }) }}>
消耗积分
{item && item?.ConsumePoint ? item?.ConsumePoint.summaryData : "-"}
环比增长 { item && item?.ConsumePoint && item?.ConsumePoint.QOQData && item?.ConsumePoint.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { item && item?.ConsumePoint && item?.ConsumePoint.QOQData && item?.ConsumePoint.summaryData ? // {item && item?.ConsumePoint ? item?.ConsumePoint.QOQData : "-"} {(((item?.ConsumePoint.summaryData - item?.ConsumePoint.QOQData) / item?.ConsumePoint.QOQData) * 100).toFixed(2) + '%'} : "" }
{/*
*/}
{ handleShowDetail(index, { TotalGrowth: item?.TotalGrowth }) }}>
总成长值
{item && item?.TotalGrowth ? item?.TotalGrowth.summaryData : "-"}
环比增长 { item && item?.TotalGrowth && item?.TotalGrowth.QOQData && item?.TotalGrowth.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { item && item?.TotalGrowth && item?.TotalGrowth.QOQData && item?.TotalGrowth.summaryData ? // {item && item?.TotalGrowth ? item?.TotalGrowth.QOQData : "-"} {(((item?.TotalGrowth.summaryData - item?.TotalGrowth.QOQData) / item?.TotalGrowth.QOQData) * 100).toFixed(2) + '%'} : "" }
{ handleShowDetail(index, { EarnGrowth: item?.EarnGrowth }) }}>
赚取成长值
{item && item?.EarnGrowth ? item?.EarnGrowth.summaryData : "-"}
环比增长 { item && item?.EarnGrowth && item?.EarnGrowth.QOQData && item?.EarnGrowth.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { item && item?.EarnGrowth && item?.EarnGrowth.QOQData && item?.EarnGrowth.summaryData ? // {item && item?.EarnGrowth ? item?.EarnGrowth.QOQData : "-"} {(((item?.EarnGrowth.summaryData - item?.EarnGrowth.QOQData) / item?.EarnGrowth.QOQData) * 100).toFixed(2) + '%'} : "" }
{/*
*/}
{ handleShowDetail(index, { ConsumeGrowth: item?.ConsumeGrowth }) }}>
消耗成长值
{item && item?.ConsumeGrowth ? item?.ConsumeGrowth.summaryData : "-"}
环比增长 { item && item?.ConsumeGrowth && item?.ConsumeGrowth.QOQData && item?.ConsumeGrowth.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { item && item?.ConsumeGrowth && item?.ConsumeGrowth.QOQData && item?.ConsumeGrowth.summaryData ? // {item && item?.ConsumeGrowth ? item?.ConsumeGrowth.QOQData : "-"} {(((item?.ConsumeGrowth.summaryData - item?.ConsumeGrowth.QOQData) / item?.ConsumeGrowth.QOQData) * 100).toFixed(2) + '%'} : "" }
{/*
*/}
}) : "" } { setCurrentIndex(null) setCurrentRow(null) setSelectTab(0) setCurrentDrawerTitle('') setShowDetail(false) }} > { selectTab <= 3 ? : selectTab > 3 ? : "" } {/* { // 判断当前选择的 1、2、3为积分的 4、5、6 为成长值的 let req: any = {} let data: any = {} // 确保使用最新的状态值 const currentTabValue = topListData[currentIndex].StatisticalName; const currentSelectTab = selectTab; if (selectTab <= 3) { req = { SearchParameter: { MEMBERSHIP_TYPE: currentTabValue || "", // PROVINCE_CODE: currentUser?.ProvinceCode || "", OPERATE_DATE_Start: searchParams?.StartDate || "", OPERATE_DATE_End: searchParams?.EndDate || "", OWNERUNIT_ID: 911, POINT_TYPE: selectTab === 1 ? '' : selectTab === 2 ? '1' : selectTab === 3 ? '-1' : '', POINT_SOURCE: '' }, keyWord: { Key: "MEMBERSHIP_NAME", Value: params?.searchText || "" }, PageIndex: params?.current, PageSize: 20, sortstr: "OPERATE_DATE desc", } data = await handleGetPOINTRECORDList(req) } else { req = { searchParameter: { // PROVINCE_CODE: currentUser?.ProvinceCode || "", OPERATE_DATE_Start: searchParams?.StartDate || "", OPERATE_DATE_End: searchParams?.EndDate || "", OWNERUNIT_ID: 911, SCORESETTING_STATE: 1, GROWTH_SOURCES: "", GROWTH_TYPE: selectTab === 4 ? '' : selectTab === 5 ? '1' : selectTab === 6 ? '-1' : '' }, PageIndex: params?.current, PageSize: 20, sortstr: "OPERATE_DATE desc", keyWord: { Key: "MEMBERSHIP_NAME", Value: params?.searchText || "" }, } data = await handleGetMEMBERGROWTHList(req); } handleSetlogSave(`查询${selectTab === 1 ? '总积分' : selectTab === 2 ? '赚取积分' : selectTab === 3 ? '消耗积分' : selectTab === 4 ? '总成长值' : selectTab === 5 ? '赚取成长值' : selectTab === 6 ? '消耗成长值' : ''}会员等级汇总`) if (data.List && data.List.length > 0) { return { data: data.List, success: true, total: data.TotalCount } } return { data: [], success: true } }} columnsState={{ value: columnsStateMap, onChange: setColumnsStateMap, }} /> */}
) } export default connect(({ user }: ConnectState) => ({ currentUser: user.currentUser }))(MembershipLevelStatistics);