ylj20011123 a07144f2c3 update
2025-08-06 19:00:53 +08:00

254 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 积分成长值汇总表
import { connect, CurrentUser } from "umi";
import { ConnectState } from "@/models/connect";
import { useEffect, useRef, useState } from "react";
import { Button, Col, Drawer, FormInstance, Row, Spin } from "antd";
import ProForm, { ProFormSelect } from "@ant-design/pro-form";
import './SummaryOfIntegralGrowthValue.less'
import { handeGetMembershipCount } from "../service";
import session from "@/utils/session";
import ProTable, { ActionType } from "@ant-design/pro-table";
import MemberInfor from "../memberInfor";
const SummaryOfIntegralGrowthValue: React.FC<{ currentUser: CurrentUser | undefined }> = (props) => {
const { currentUser } = props
const formRef = useRef<FormInstance>();
const actionRef = useRef<ActionType>();
// 选择的tab
const [selectPageTab, setSelectPageTab] = useState<any>(1)
// 会员类型数据
const [membershipType, setMembershipType] = useState<any>()
// 会员等级数据
const [membershipLevel, setMembershipLevel] = useState<any>()
// 会员类型数量
const [membershipTypeTotal, setMembershipTypeTotal] = useState<number>(0)
// 会员等级数量
const [membershipLevelTotal, setmembershipLevelTotal] = useState<number>(0)
// 显示详情抽屉
const [showDetail, setShowDetail] = useState<boolean>(false)
const [currentRow, setCurrentRow] = useState<any>()
// 抽屉显示的标题
const [currentDrawerTitle, setCurrentDrawerTitle] = useState<string>()
// 1 是 会员类型 2是 会员等级
const [searchType, setSearchType] = useState<any>()
// 对应的枚举类型
const [valueType, setValueType] = useState<any>()
// 显示加载效果
const [showLoading, setShowLoading] = useState<boolean>(false)
let MEMBERSHIPLEVELYNObj = session.get('MEMBERSHIPLEVELYNObj')
let MEMBERSHIPTYPEYNObj = session.get('MEMBERSHIPTYPEYNObj')
const handleGetData = async (formData?: any) => {
console.log('formDataformDataformData', formData);
const req: any = {
CalcType: 1, // 会员类型
OwnerUnitId: currentUser?.OwnerUnitId,
ExcludeTest: formData ? formData?.ExcludeTest === 1 ? true : false : true,
StartDate: "",
EndDate: "",
MembershipType: "",
MembershipLevel: ""
}
const req2: any = {
CalcType: 2,// 会员等级
OwnerUnitId: currentUser?.OwnerUnitId,
ExcludeTest: formData ? formData?.ExcludeTest === 1 ? true : false : true,
StartDate: "",
EndDate: "",
MembershipType: "",
MembershipLevel: ""
}
setShowLoading(true)
const data = await handeGetMembershipCount(req)
const data2 = await handeGetMembershipCount(req2)
setShowLoading(false)
console.log('datadatadatadata', data);
console.log('data2data2data2', data2);
setMembershipType(data.List)
setMembershipLevel(data2.List)
setMembershipTypeTotal(data.OtherData)
setmembershipLevelTotal(data2.OtherData)
}
// 点击事件
const handleShowTableData = async (type: number, memberType: any) => {
// type 1 的话是 会员类型 2 的话是 会员等级 memberType 对应的枚举值
setCurrentDrawerTitle(`${type === 1 ? '会员类型' : type === 2 ? '会员等级' : ''}${type === 1 ? MEMBERSHIPTYPEYNObj && memberType ? MEMBERSHIPTYPEYNObj[memberType] : '' : type === 2 ? MEMBERSHIPLEVELYNObj && memberType ? MEMBERSHIPLEVELYNObj[memberType] : '' : ''}`)
setSearchType(type)
setValueType(memberType)
setShowDetail(true)
}
useEffect(() => {
handleGetData()
}, [])
return (
<div className="SummaryOfIntegralGrowthValueMain">
{
showLoading ?
<div
style={{
width: '100%',
height: '100%',
background: 'rgba(0,0,0,0.1)',
position: 'absolute',
zIndex: 5,
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
}}
>
<div style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
padding: '15px 20px 10px',
background: '#fff',
borderRadius: '8px',
width: '200px'
}}>
<Spin />
<span style={{ marginLeft: '5px' }}>...</span>
</div>
</div> : ''
}
<div className="SummaryOfIntegralGrowthValueTop">
{/* <div className="SummaryOfIntegralGrowthValueTitleBox">
<div className={selectPageTab === 1 ? 'SummaryOfIntegralGrowthValueTitle SummaryOfIntegralGrowthValueTitleSelect' : 'SummaryOfIntegralGrowthValueTitle'} onClick={() => {
setSelectPageTab(1)
}}>会员类型</div>
<div style={{ marginLeft: '48px' }} className={selectPageTab === 2 ? 'SummaryOfIntegralGrowthValueTitle SummaryOfIntegralGrowthValueTitleSelect' : 'SummaryOfIntegralGrowthValueTitle'} onClick={() => {
setSelectPageTab(2)
}}>会员等级</div>
</div> */}
<Row style={{ marginTop: "16px" }}>
<Col span={6}>
<ProForm
layout={'horizontal'}
formRef={formRef}
submitter={false}
onFinish={async (values: any) => {
console.log('valuesvaluesvaluesvalues', values);
handleGetData(values)
}}
>
<ProFormSelect
label={"是否排除测试会员"}
name={"ExcludeTest"}
options={[{ label: '是', value: 1 }, { label: '否', value: 0 }]}
initialValue={1}
/>
</ProForm>
</Col>
<Col span={12}></Col>
<Col span={6}>
<div style={{ display: 'flex', justifyContent: 'flex-end' }}>
<Button style={{ marginRight: '8px' }} onClick={() => {
formRef.current?.resetFields()
}}></Button>
<Button type={"primary"} onClick={() => {
formRef.current?.submit()
}}></Button>
</div>
</Col>
</Row>
</div>
<div className="SummaryOfIntegralGrowthValueBottom">
{
membershipType && membershipType.length > 0 ?
<>
<div className="SummaryOfIntegralGrowthValueTitleBox">
<div className="SummaryOfIntegralGrowthValueTitle">{membershipTypeTotal ? `${membershipTypeTotal}人)` : ""}</div>
</div>
<div className="SummaryOfIntegralGrowthValueContentBox">
<div className="SummaryOfIntegralGrowthValueItemOther">
{
membershipType.map((item: any) => {
return <div className="SummaryOfIntegralGrowthValueOtherItem" onClick={() => {
handleShowTableData(1, item.label)
}}>
<div className="otherItemTitle">{item.label === '0' ? '未授权用户' : MEMBERSHIPTYPEYNObj && item.label ? MEMBERSHIPTYPEYNObj[item.label] : ''}</div>
<div className="otherItemValue">{item.value}<span className="otherItemValueUnit"></span></div>
<div className="addLabel"></div>
<div className="otherItemAddBox">
<span className="addValue">{item.key ? item.key > 1000 ? '1000%' : item.key + '%' : ""}</span>
</div>
</div>
})
}
</div>
</div>
</>
: ""
}
{
membershipLevel && membershipLevel.length > 0 ?
<>
<div className="SummaryOfIntegralGrowthValueTitleBox" style={{ marginTop: '32px' }}>
<div className="SummaryOfIntegralGrowthValueTitle">{membershipLevelTotal ? `${membershipLevelTotal}人)` : ""}</div>
</div>
<div className="SummaryOfIntegralGrowthValueContentBox">
<div className="SummaryOfIntegralGrowthValueItemOther">
{
membershipLevel.map((item: any) => {
return <div className="SummaryOfIntegralGrowthValueOtherItem" onClick={() => {
handleShowTableData(2, item.label)
}}>
<div className="otherItemTitle">{item.label === '0' ? '未授权用户' : MEMBERSHIPLEVELYNObj && item.label ? MEMBERSHIPLEVELYNObj[item.label] : ''}</div>
<div className="otherItemValue">{item.value}<span className="otherItemValueUnit"></span></div>
<div className="addLabel"></div>
<div className="otherItemAddBox">
<span className="addValue">{item.key ? item.key > 1000 ? '1000%' : item.key + '%' : ""}</span>
</div>
</div>
})
}
</div>
</div>
</>
: ""
}
</div>
<Drawer
width={'80%'}
title={currentDrawerTitle || ""}
visible={showDetail}
destroyOnClose
closable={false}
onClose={() => {
setSearchType(null)
setValueType(null)
setShowDetail(false)
}}
>
<MemberInfor searchType={searchType} valueType={valueType} isComponent={true} noMemberType={searchType === 1} noMemberLevel={searchType === 2} />
</Drawer>
</div>
)
}
export default connect(({ user }: ConnectState) => ({
currentUser: user.currentUser
}))(SummaryOfIntegralGrowthValue);