// 会员汇总统计 //会员积分报表 import { ConnectState } from "@/models/connect"; import { connect, CurrentUser } from "umi"; import './MemberSummaryStatistics.less' import ProTable, { ActionType } from "@ant-design/pro-table"; import { useEffect, useRef, useState } from "react"; import { Button, Col, FormInstance, Row, 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 staticSumTotalBg from '@/assets/detail/staticSumTotalBg.png' import session from "@/utils/session"; import ProForm, { ProFormDateRangePicker, ProFormTreeSelect } from "@ant-design/pro-form"; import { handleSetlogSave } from "@/utils/format"; import OrderDetailModal from "../BookingMealOrder/components/orderDetailModal"; import MemberDetail from "../memberInfor/component/memberDetail"; import PointsRecordSearch from "../PointsRecordSearch"; import GrowthValueRecordSearch from "../GrowthValueRecordSearch"; const MemberSummaryStatistics: 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') }) 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 [showOrderModal, setShowOrderModal] = useState(false) const [currentRow, setCurrentRow] = useState() // 显示详情抽屉 const [showDetailDrawer, setShowDetailDrawer] = useState(false) // 传入给子组件的搜索内容 const [toChildrenSearchParams, setToChildrenSearchParams] = useState({ SearchParameter: { // PROVINCE_CODE: currentUser?.ProvinceCode || "", OPERATE_DATE_Start: searchParams?.StartDate || "", OPERATE_DATE_End: searchParams?.EndDate || "", OWNERUNIT_ID: 911, POINT_TYPE: '', POINT_SOURCE: '', MEMBERSHIP_TARGET: searchParams?.MEMBERSHIP_TARGET && searchParams?.MEMBERSHIP_TARGET.length > 0 ? searchParams?.MEMBERSHIP_TARGET.toString() : "" }, keyWord: { Key: "MEMBERSHIP_NAME", Value: searchParams?.searchText || "" }, PageIndex: searchParams?.current, PageSize: 20, sortstr: "OPERATE_DATE desc", }) // 积分的columns const columns: any = [ { title: '查询内容', dataIndex: 'searchText', hideInTable: true, fieldProps: { placeholder: '请输入门店名称/用户昵称' } }, { title: '查询时间', dataIndex: 'search_date', valueType: 'dateRange', hideInTable: true, hideInDescriptions: true, search: { transform: (value) => { return { OPERATE_DATE_Start: value[0], OPERATE_DATE_End: value[1], }; }, }, fieldProps: { ranges: { "本月": [moment().startOf('M'), moment()], "上月": [moment().subtract(1, 'M').startOf('M'), moment().subtract(1, 'M').endOf('M')], "近三月": [moment().subtract(3, 'M').startOf('M'), moment().endOf('M')], "近半年": [moment().subtract(6, 'M').startOf('M'), moment().endOf('M')], } }, initialValue: [moment().startOf('M'), moment()], }, { title: "会员昵称", width: 150, dataIndex: "MEMBERSHIP_NAME", hideInSearch: true, align: 'center', ellipsis: true, render: (_, record) => { return record?.MEMBERSHIP_NAME ? { setCurrentRow(record) setShowDetailDrawer(true) handleSetlogSave(`查看${record?.MEMBERSHIP_NAME}【${record?.MEMBERSHIP_ID}】会员信息`) }}> {record?.MEMBERSHIP_NAME} : "-" } }, { title: "会员等级", width: 150, dataIndex: "MEMBERSHIP_LEVEL", hideInSearch: true, align: 'center', ellipsis: true, valueType: 'select', valueEnum: MEMBERSHIPLEVELYNObj }, { title: "会员类型", width: 120, dataIndex: "MEMBERSHIP_TYPE", ellipsis: true, hideInSearch: true, align: 'center', valueType: 'select', valueEnum: { ...MEMBERSHIPTYPEYNObj, }, }, { title: "积分方式", width: 120, dataIndex: "POINT_TYPE", ellipsis: true, valueType: 'select', align: 'center', valueEnum: { "0": "全部", "1": "累计", "-1": "消耗" }, initialValue: "0" }, { title: "积分来源", width: 120, dataIndex: "POINT_SOURCE", ellipsis: true, valueType: 'treeSelect', align: 'center', request: () => { return SCORETYPETree }, fieldProps: { allowClear: true } // valueEnum: { // "0": "全部", // "1000": "消费赠送", // "2000": "消费抵扣", // "3000": "注册赠送" // }, // initialValue: "0" }, { title: "订单编号", width: 250, dataIndex: "TICKET_CODE", hideInSearch: true, align: 'center', ellipsis: true, valueType: 'digit', render: (_, record) => { return record?.TICKET_CODE ? { setCurrentRow(record) setShowOrderModal(true) }}>{record?.TICKET_CODE} : "-" } }, { 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: 120, dataIndex: "PAY_AMOUNT", hideInSearch: true, ellipsis: true, align: 'center', valueType: "digit" }, { 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: 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(() => { let [StartDate, EndDate] = [moment().startOf('M').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')] handleGetTopData(StartDate, EndDate) }, []) // 获取顶部的数据 const handleGetTopData = async (StartDate?: string, EndDate?: string, MEMBERSHIP_TARGET?: string) => { const req: any = { CalcType: 1, // 1 汇总 2 会员等级 3 会员类型 OwnerUnitId: currentUser?.OwnerUnitId, StartDate: StartDate ? StartDate : "", EndDate: EndDate ? EndDate : "", PointSource: "", ServerpartId: "", MemberShipId: "", MembershipType: "", MembershipLevel: "", MembershipTarget: MEMBERSHIP_TARGET && MEMBERSHIP_TARGET.length > 0 ? MEMBERSHIP_TARGET.toString() : "" } const data = await handeGetPointGrowthSummary(req) console.log('datadatadatadatadata', data); let sumObj: any = data[0] setTopData(sumObj) } // 改变顶部的选择 const handleChangeTab = (value: number) => { setSelectTab(value) let req: any = {} if (value <= 3) { req = { SearchParameter: { // PROVINCE_CODE: currentUser?.ProvinceCode || "", OPERATE_DATE_Start: searchParams?.StartDate || "", OPERATE_DATE_End: searchParams?.EndDate || "", OWNERUNIT_ID: 911, POINT_TYPE: value === 1 ? '' : value === 2 ? '1' : value === 3 ? '-1' : '', POINT_SOURCE: '', MEMBERSHIP_TARGET: searchParams?.MEMBERSHIP_TARGET && searchParams?.MEMBERSHIP_TARGET.length > 0 ? searchParams?.MEMBERSHIP_TARGET.toString() : "" }, 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: value === 4 ? '' : value === 5 ? '1' : value === 6 ? '-1' : '', MEMBERSHIP_TARGET: searchParams?.MEMBERSHIP_TARGET && searchParams?.MEMBERSHIP_TARGET.length > 0 ? searchParams?.MEMBERSHIP_TARGET.toString() : "" }, PageIndex: searchParams?.current, PageSize: 20, sortstr: "OPERATE_DATE desc", keyWord: { Key: "MEMBERSHIP_NAME", Value: searchParams?.searchText || "" }, } } setToChildrenSearchParams(req) actionRef.current?.reload() if (value <= 3) { PointsRecordSearchRef.current?.actionRef?.current?.reload() } else { GrowthValueRecordSearchRef.current?.actionRef?.current?.reload() } } const handleCloseModal = () => { setShowOrderModal(false) setCurrentRow(null) setShowDetailDrawer(false) } return (
会员数据汇总
{ 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 }) let req: any = {} if (selectTab <= 3) { req = { SearchParameter: { // PROVINCE_CODE: currentUser?.ProvinceCode || "", OPERATE_DATE_Start: StartDate || "", OPERATE_DATE_End: EndDate || "", OWNERUNIT_ID: 911, POINT_TYPE: selectTab === 1 ? '' : selectTab === 2 ? '1' : selectTab === 3 ? '-1' : '', POINT_SOURCE: '', MEMBERSHIP_TARGET: values?.MEMBERSHIP_TARGET && values?.MEMBERSHIP_TARGET.length > 0 ? values?.MEMBERSHIP_TARGET.toString() : "" }, 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: StartDate || "", OPERATE_DATE_End: EndDate || "", OWNERUNIT_ID: 911, SCORESETTING_STATE: 1, GROWTH_SOURCES: "", GROWTH_TYPE: selectTab === 4 ? '' : selectTab === 5 ? '1' : selectTab === 6 ? '-1' : '', MEMBERSHIP_TARGET: searchParams?.MEMBERSHIP_TARGET && searchParams?.MEMBERSHIP_TARGET.length > 0 ? searchParams?.MEMBERSHIP_TARGET.toString() : "" }, PageIndex: searchParams?.current, PageSize: 20, sortstr: "OPERATE_DATE desc", keyWord: { Key: "MEMBERSHIP_NAME", Value: searchParams?.searchText || "" }, } } setToChildrenSearchParams(req) actionRef.current?.reload() PointsRecordSearchRef.current?.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={{ multiple: true, 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', } }} />
{ handleChangeTab(1) }}>
总积分
{topData && topData?.TotalPoint ? topData?.TotalPoint.summaryData : "-"}
环比增长 { topData && topData?.TotalPoint && topData?.TotalPoint.QOQData && topData?.TotalPoint.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { topData && topData?.TotalPoint && topData?.TotalPoint.QOQData && topData?.TotalPoint.summaryData ? // {topData && topData?.TotalPoint ? topData?.TotalPoint.QOQData : "-"} {((topData?.TotalPoint.summaryData - topData?.TotalPoint.QOQData) / topData?.TotalPoint.QOQData) > 10 ? '1000%' : (((topData?.TotalPoint.summaryData - topData?.TotalPoint.QOQData) / topData?.TotalPoint.QOQData) * 100).toFixed(2) + '%'} : "-" }
{ handleChangeTab(2) }}>
赚取积分
{topData && topData?.EarnPoint ? topData?.EarnPoint.summaryData : "-"}
环比增长 { topData && topData?.EarnPoint && topData?.EarnPoint.QOQData && topData?.EarnPoint.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { topData && topData?.EarnPoint && topData?.EarnPoint.QOQData && topData?.EarnPoint.summaryData ? // {topData && topData?.EarnPoint ? topData?.EarnPoint.QOQData : "-"} {((topData?.EarnPoint.summaryData - topData?.EarnPoint.QOQData) / topData?.EarnPoint.QOQData) > 10 ? '1000%' : (((topData?.EarnPoint.summaryData - topData?.EarnPoint.QOQData) / topData?.EarnPoint.QOQData) * 100).toFixed(2) + '%'} : "" }
{/*
*/}
{ handleChangeTab(3) }}>
消耗积分
{topData && topData?.ConsumePoint ? topData?.ConsumePoint.summaryData : "-"}
环比增长 { topData && topData?.ConsumePoint && topData?.ConsumePoint.QOQData && topData?.ConsumePoint.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { topData && topData?.ConsumePoint && topData?.ConsumePoint.QOQData && topData?.ConsumePoint.summaryData ? // {topData && topData?.ConsumePoint ? topData?.ConsumePoint.QOQData : "-"} {((topData?.ConsumePoint.summaryData - topData?.ConsumePoint.QOQData) / topData?.ConsumePoint.QOQData) > 10 ? '1000%' : (((topData?.ConsumePoint.summaryData - topData?.ConsumePoint.QOQData) / topData?.ConsumePoint.QOQData) * 100).toFixed(2) + '%'} : "" }
{/*
*/}
{ handleChangeTab(4) }}>
总成长值
{topData && topData?.TotalGrowth ? topData?.TotalGrowth.summaryData : "-"}
环比增长 { topData && topData?.TotalGrowth && topData?.TotalGrowth.QOQData && topData?.TotalGrowth.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { topData && topData?.TotalGrowth && topData?.TotalGrowth.QOQData && topData?.TotalGrowth.summaryData ? // {topData && topData?.TotalGrowth ? topData?.TotalGrowth.QOQData : "-"} {((topData?.TotalGrowth.summaryData - topData?.TotalGrowth.QOQData) / topData?.TotalGrowth.QOQData) > 10 ? '1000%' : (((topData?.TotalGrowth.summaryData - topData?.TotalGrowth.QOQData) / topData?.TotalGrowth.QOQData) * 100).toFixed(2) + '%'} : "" }
{ handleChangeTab(5) }}>
赚取成长值
{topData && topData?.EarnGrowth ? topData?.EarnGrowth.summaryData : "-"}
环比增长 { topData && topData?.EarnGrowth && topData?.EarnGrowth.QOQData && topData?.EarnGrowth.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { topData && topData?.EarnGrowth && topData?.EarnGrowth.QOQData && topData?.EarnGrowth.summaryData ? // {topData && topData?.EarnGrowth ? topData?.EarnGrowth.QOQData : "-"} {((topData?.EarnGrowth.summaryData - topData?.EarnGrowth.QOQData) / topData?.EarnGrowth.QOQData) > 10 ? '1000%' : (((topData?.EarnGrowth.summaryData - topData?.EarnGrowth.QOQData) / topData?.EarnGrowth.QOQData) * 100).toFixed(2) + '%'} : "" }
{/*
*/}
{ handleChangeTab(6) }}>
消耗成长值
{topData && topData?.ConsumeGrowth ? topData?.ConsumeGrowth.summaryData : "-"}
环比增长 { topData && topData?.ConsumeGrowth && topData?.ConsumeGrowth.QOQData && topData?.ConsumeGrowth.summaryData ? 0 ? addIcon : reduceIcon} /> : "" } { topData && topData?.ConsumeGrowth && topData?.ConsumeGrowth.QOQData && topData?.ConsumeGrowth.summaryData ? // {topData && topData?.ConsumeGrowth ? topData?.ConsumeGrowth.QOQData : "-"} {((topData?.ConsumeGrowth.summaryData - topData?.ConsumeGrowth.QOQData) / topData?.ConsumeGrowth.QOQData) > 10 ? '1000%' : (((topData?.ConsumeGrowth.summaryData - topData?.ConsumeGrowth.QOQData) / topData?.ConsumeGrowth.QOQData) * 100).toFixed(2) + '%'} : "" }
{/*
*/}
{ selectTab <= 3 ? : selectTab > 3 ? : "" } {/* { // 判断当前选择的 1、2、3为积分的 4、5、6 为成长值的 let req: any = {} let data: any = {} const params = searchParams; if (selectTab <= 3) { req = { SearchParameter: { // PROVINCE_CODE: currentUser?.ProvinceCode || "", OPERATE_DATE_Start: params?.StartDate || "", OPERATE_DATE_End: params?.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: params?.StartDate || "", OPERATE_DATE_End: params?.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); } setSearchParams(params) 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 }))(MemberSummaryStatistics);