import { UpCircleOutlined, DownCircleOutlined } from '@ant-design/icons' import { Radio, Col, DatePicker, Input, Row, Space, Checkbox, Divider } from 'antd' import { CheckboxValueType } from 'antd/lib/checkbox/Group' import { RadioChangeEvent } from 'antd/lib/radio' import moment from 'moment' import React, { useEffect, useReducer, useState } from 'react' import style from './index.less' /**粉丝选项 */ type State = { fansFilterOsType?: any[],//操作系统 fansFilterMember?: '' | boolean,//是否是会员 fansFilterSubscribeTimeType?: '' | 1 | 2 | 3,//关注时间 fansFilterSubscribeTimeBegin?: string | '',//关注起始时间 fansFilterSubscribeTimeEnd?: string | '',//关注截至时间 rechargeType?: '' | number,//充值情况选项 fansFilterRechargeCountMin?: string | '',//充值次数(最少) fansFilterRechargeCountMax?: string | '',//充值次数(最多) dayType?: '' | number,//天数选项 fansFilterRechargeTimeMin?: string | '',//上次充值时间(最少 n天内) fansFilterRechargeTimeMax?: string | '',//上次充值时间(最大 n天内) fansFilterRechargeMin?: string | '',//最低充值金额 fansFilterRechargeMax?: string | '',//最大充值金额 countType?: '' | number,//书币选项 fansFilterCoinCountMin?: string | '',//最低书币余额 fansFilterCoinCountMax?: string | '',//最高书币余额 timeType?: '' | number,//时间选项 fansFilterActiveTimeMin?: string | '',//上次活跃距今时间(最低) fansFilterActiveTimeMax?: string | '',//上次活跃距今时间(最高) fansFilterSex?: any[],//粉丝性别 } type Action = { type: 'setData' | 'initData', params: State } function reducer(state: State, action: Action) { let { type, params } = action let newState = JSON.parse(JSON.stringify(state)) switch (type) { case 'setData': Object.keys(params as State).forEach((key: string) => { newState[key] = (params as State)[key] }) return newState case 'initData': let data: any = initialState if (params) { data = { ...data, ...params } } return data default: return state } } const initialState = { fansFilterOsType: [],//操作系统 fansFilterMember: '',//是否是会员 fansFilterSex: [],//粉丝性别 fansFilterSubscribeTimeType: '',//关注时间 fansFilterSubscribeTimeBegin: '',//关注起始时间 fansFilterSubscribeTimeEnd: '',//关注截至时间 fansFilterRechargeCountMin: '',//充值次数(最少) fansFilterRechargeCountMax: '',//充值次数(最多) fansFilterRechargeTimeMin: '',//上次充值时间(最少 n天内) fansFilterRechargeTimeMax: '',//上次充值时间(最大 n天内) fansFilterRechargeMin: '',//最低充值金额 fansFilterRechargeMax: '',//最大充值金额 fansFilterCoinCountMin: '',//最低书币余额 fansFilterCoinCountMax: '',//最高书币余额 fansFilterActiveTimeMin: '',//上次活跃距今时间(最低) fansFilterActiveTimeMax: '',//上次活跃距今时间(最高) rechargeType: '',//充值情况选项 dayType: '',//天数选项 countType: '',//书币选项 timeType: ''//时间选项 } type Props = { callback: (value: State) => void;//回调函数获取数据 defaultValue?: any;//回填数据 openConfig?: { /**活跃时间*/ activeTime: boolean } } function FansSelect(props: Props) { const [open, setOpen] = useState({ a: 1, b: 1, c: 1, d: 1 }) const [state, dispatch] = useReducer(reducer, initialState) const { callback, defaultValue = initialState,openConfig} = props let [activeTime,setActiveTime] =useState(openConfig?.activeTime !== undefined ? openConfig?.activeTime : true) const { fansFilterMember, fansFilterSubscribeTimeType, fansFilterSubscribeTimeBegin, fansFilterSubscribeTimeEnd, fansFilterRechargeCountMin, fansFilterRechargeCountMax, fansFilterRechargeTimeMin, fansFilterRechargeTimeMax, fansFilterRechargeMin, fansFilterRechargeMax, fansFilterCoinCountMin, fansFilterCoinCountMax, fansFilterActiveTimeMin, fansFilterActiveTimeMax, rechargeType, dayType, countType, timeType, fansFilterSex, fansFilterOsType } = state //数据回填 useEffect(() => { if (defaultValue && JSON.stringify(defaultValue) !== '{}') { let { fansFilterMember, fansFilterSubscribeTimeType, fansFilterSubscribeTimeBegin, fansFilterSubscribeTimeEnd, fansFilterRechargeCountMin, fansFilterRechargeCountMax, fansFilterRechargeTimeMin, fansFilterRechargeTimeMax, fansFilterRechargeMin, fansFilterRechargeMax, fansFilterCoinCountMin, fansFilterCoinCountMax, fansFilterActiveTimeMin, fansFilterActiveTimeMax, fansFilterSex, fansFilterOsType } = defaultValue dispatch({ type: 'initData', params: { fansFilterMember, fansFilterSubscribeTimeType, fansFilterSubscribeTimeBegin, fansFilterSubscribeTimeEnd, fansFilterRechargeCountMin, fansFilterRechargeCountMax, fansFilterRechargeTimeMin, fansFilterRechargeTimeMax, fansFilterRechargeMin, fansFilterRechargeMax, fansFilterCoinCountMin, fansFilterCoinCountMax, fansFilterActiveTimeMin, fansFilterActiveTimeMax, fansFilterSex, fansFilterOsType, rechargeType: fansFilterRechargeCountMin === null && fansFilterRechargeCountMax === null ? '' : fansFilterRechargeCountMin == 0 && fansFilterRechargeCountMax == 0 ? 0 : fansFilterRechargeCountMin == 1 && fansFilterRechargeCountMax == null ? -1 : fansFilterRechargeCountMin == 1 && fansFilterRechargeCountMax == 1 ? 1 : fansFilterRechargeCountMin == 2 && fansFilterRechargeCountMax == 2 ? 2 : fansFilterRechargeCountMin == 3 && fansFilterRechargeCountMax == 3 ? 3 : fansFilterRechargeCountMin == 4 && fansFilterRechargeCountMax == 4 ? 4 : fansFilterRechargeCountMin == 5 && fansFilterRechargeCountMax == 5 ? 5 : fansFilterRechargeCountMin == 6 && fansFilterRechargeCountMax == 6 ? 6 : fansFilterRechargeCountMin == 7 && fansFilterRechargeCountMax == 7 ? 7 : fansFilterRechargeCountMin == 8 && fansFilterRechargeCountMax == 8 ? 8 : fansFilterRechargeCountMin == 10 && fansFilterRechargeCountMax == 10 ? 10 : fansFilterRechargeCountMin > 10 && fansFilterRechargeCountMax > 10 ? 11 : -2, dayType: fansFilterRechargeTimeMin === null && fansFilterRechargeTimeMax === null ? '' : fansFilterRechargeTimeMin == 0 && fansFilterRechargeTimeMax == 15 ? 15 : fansFilterRechargeTimeMin == 0 && fansFilterRechargeTimeMax == 30 ? 30 : fansFilterRechargeTimeMin == 30 && fansFilterRechargeTimeMax == 0 ? 31 : fansFilterRechargeTimeMin == 0 && fansFilterRechargeTimeMax == 45 ? 45 : fansFilterRechargeTimeMin == 0 && fansFilterRechargeTimeMax == 60 ? 60 : 61, timeType: fansFilterActiveTimeMin == null && fansFilterActiveTimeMax == null ? '' : fansFilterActiveTimeMin == 0 && fansFilterActiveTimeMax == 1 ? 1 : fansFilterActiveTimeMin == 1 && fansFilterActiveTimeMax == 3 ? 2 : fansFilterActiveTimeMin == 3 && fansFilterActiveTimeMax == 12 ? 3 : fansFilterActiveTimeMin == 12 && fansFilterActiveTimeMax == 24 ? 4 : 5 } }) } }, [defaultValue]) useEffect(() => { let { rechargeType, dayType, countType, timeType, ...obj } = state callback(obj) }, [state]) console.log('rechargeType--->', rechargeType); return {/* { dispatch({ type: 'setData', params: { fansFilterSex: checkedValue } }) }} value={fansFilterSex} > 不限 未知 */} { dispatch({ type: 'setData', params: { fansFilterOsType: checkedValue } }) }} value={fansFilterOsType} > 未知 安卓 IOS {/*
{ dispatch({ type: 'setData', params: { fansFilterMember: e.target.value } }) }} value={fansFilterMember}> 不限
*/}
{ dispatch({ type: 'setData', params: { fansFilterSubscribeTimeType: e.target.value, fansFilterSubscribeTimeBegin: '', fansFilterSubscribeTimeEnd: '', } }) }} value={fansFilterSubscribeTimeType === null ? '' : fansFilterSubscribeTimeType} > 不限 具体时间 常用日期 动态日期
{ fansFilterSubscribeTimeType === 0 &&
{ dispatch({ type: 'setData', params: { fansFilterSubscribeTimeBegin: formatString[0], fansFilterSubscribeTimeEnd: formatString[1], } }) }} value={fansFilterSubscribeTimeBegin ? [moment(fansFilterSubscribeTimeBegin), moment(fansFilterSubscribeTimeEnd)] : undefined} />
} { fansFilterSubscribeTimeType === 1 &&
) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterSubscribeTimeBegin: v } }) }} /> ) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterSubscribeTimeEnd: v } }) }} /> { let arr = ['', ['0', '1'], ['0', '24'], ['0', '48'], ['48', '']] dispatch({ type: 'setData', params: { fansFilterSubscribeTimeBegin: arr[e.target.value][0], fansFilterSubscribeTimeEnd: arr[e.target.value][1], } }) }} value={ fansFilterSubscribeTimeBegin === "48" && fansFilterSubscribeTimeEnd === '' ? 4 : fansFilterSubscribeTimeBegin === "0" && fansFilterSubscribeTimeEnd === '48' ? 3 : fansFilterSubscribeTimeBegin === "0" && fansFilterSubscribeTimeEnd === '24' ? 2 : fansFilterSubscribeTimeBegin === "0" && fansFilterSubscribeTimeEnd === '1' ? 1 : ''}> 1小时内 24小时内 48小时内 48小时外
} { fansFilterSubscribeTimeType === 2 &&
) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterSubscribeTimeBegin: v } }) }} /> ) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterSubscribeTimeEnd: v } }) }} />
}
) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterRechargeCountMin: v } }) }} /> ) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterRechargeCountMax: v } }) }} />
{ dispatch({ type: 'setData', params: { rechargeType: e.target.value, fansFilterRechargeCountMin: e.target.value === '' ? '' : e.target.value === 11 ? 10 : e.target.value === -1 ? 1 : e.target.value, fansFilterRechargeCountMax: e.target.value === 11 ? '' : e.target.value === -1 ? '' : e.target.value } }) }} value={rechargeType} > 不限 未充值 已充值 { !!open.a && <> 充值1次 充值2次 充值3次 充值5次 充值8次 充值10次 充值10次以上 } setOpen({ ...open, a: !open.a })}>{!!open.a ? : }
) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterRechargeTimeMin: v } }) }} /> ) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterRechargeTimeMax: v } }) }} />
{ dispatch({ type: 'setData', params: { dayType: e.target.value, fansFilterRechargeTimeMin: e.target.value === '' ? '' : e.target.value === 31 ? '30' : e.target.value === 61 ? '60' : '0', fansFilterRechargeTimeMax: e.target.value === 31 ? '' : e.target.value === 61 ? '' : e.target.value } }) }} value={dayType} > 不限 15天之内 30天之内 { !!open.b && <> 30天以上 45天之内 60天之内 60天以上 } setOpen({ ...open, b: !open.b })}>{!!open['b'] ? : }
) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterRechargeMin: v } }) }} value={fansFilterRechargeMin} /> ) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterRechargeMax: v } }) }} value={fansFilterRechargeMax} /> {/*
) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterCoinCountMin: v } }) }} /> ) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterCoinCountMax: v } }) }} />
{ let arr = [['', ''], ['0', '500'], ['501', '1000'], ['1001', '3000'], ['3001', '10000'], ['10000', '']] dispatch({ type: 'setData', params: { countType: e.target.value, fansFilterCoinCountMin: e.target.value === '' ? arr[0][0] : arr[e.target.value][0], fansFilterCoinCountMax: e.target.value === '' ? arr[0][1] : arr[e.target.value][1], } }) }} value={countType}> 不限 低于500 501-1000 { !!open.c && <> 1001-3000 3001-10000 10000以上 } setOpen({ ...open, c: !open.c })}>{!!open['c'] ? : }
*/} {activeTime &&
) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterActiveTimeMin: v } }) }} /> ) => { let v = event.target.value dispatch({ type: 'setData', params: { fansFilterActiveTimeMax: v } }) }} />
{ let arr = [['', ''], ['0', '1'], ['1', '3'], ['3', '12'], ['12', '24'], ['24', '48']] dispatch({ type: 'setData', params: { timeType: e.target.value, fansFilterActiveTimeMin: e.target.value === '' ? arr[0][0] : arr[e.target.value][0], fansFilterActiveTimeMax: e.target.value === '' ? arr[0][1] : arr[e.target.value][1], } }) }} value={timeType} > 不限 1小时 1-3小时 { !!open.d && <> 3-12小时 12-24小时 24-48小时 } setOpen({ ...open, d: !open.d })}>{!!open['d'] ? : }
}
} export default React.memo(FansSelect, (a, b) => { if (JSON.stringify(a) === JSON.stringify(b)) { return true } return false })