import { useContext, useEffect, useState } from 'react'; import { observer } from 'mobx-react'; import { Row, Col, Spin, Space, Radio, Table } from 'antd'; import { CheckCircleTwoTone, MoneyCollectTwoTone, FlagTwoTone, SmileTwoTone } from '@ant-design/icons'; import { stores_Context } from '../config'; import { useNavigate } from 'react-router-dom'; import StatisticCard from '../components/StatisticCard'; import StatisticCard2 from '../components/StatisticCard2'; import Bullet from '../components/BulletWithSort'; import Waterfall from '../components/Waterfall'; import LineWithKPI from '../components/LineWithKPI'; import Donut from './../components/Donut'; import DataFieldRadio from '../components/DataFieldRadio'; import { datePartOptions } from './../components/DateGroupRadio/date'; import SearchForm from './../components/search/SearchForm'; import { empty, cloneDeep, isEmpty } from './../utils/commons'; import { dataFieldAlias } from './../libs/ht'; import { Line } from '@ant-design/charts'; import './home.css'; const topSeries = [ { key: 'dept', label: '小组', graphVisible: true }, { key: 'operator', label: '顾问', graphVisible: true }, { key: 'country', label: '国籍', graphVisible: true }, { key: 'GuestGroupType', label: '客群类别', graphVisible: false }, { key: 'destination', label: '目的地', graphVisible: true }, ]; // const iconSets = [CheckCircleTwoTone, , , , ,,]; const iconSets = [CheckCircleTwoTone, MoneyCollectTwoTone, FlagTwoTone, SmileTwoTone]; export default observer(() => { // const navigate = useNavigate(); const { TradeStore, date_picker_store: searchFormStore } = useContext(stores_Context); const { sideData, summaryData, BuData, topData, timeData, timeLineKey, targetTableProps } = TradeStore; const { formValues } = searchFormStore; useEffect(() => { if (empty(summaryData.dataSource)) { // pageRefresh(); } return () => {}; }, []); const [topSeriesSet, setTopSeriesSet] = useState(topSeries); const [overviewFlag, setOverviewFlag] = useState(true); const [groupTypeVal, setGroupTypeVal] = useState('overview'); const pageRefresh = (queryData) => { const _overviewFlag = queryData.DepartmentList.toLowerCase() === 'all' || queryData.DepartmentList.toLowerCase().includes(','); const groupType = _overviewFlag ? 'overview' : 'dept'; queryData.groupType = groupType; setGroupTypeVal(groupType); TradeStore.resetData(); TradeStore.fetchSummaryData(Object.assign({}, queryData, { groupType })); TradeStore.fetchTradeDataByDate(queryData); TradeStore.fetchTradeDataByBU(queryData); TradeStore.fetchTradeDataByMonth(queryData); const topSeriesF = _overviewFlag ? topSeries : topSeries.filter((ele) => ele.key !== 'dept'); setTopSeriesSet(topSeriesF); setOverviewFlag(_overviewFlag); for (const iterator of topSeriesF) { TradeStore.fetchTradeDataByType(iterator.key, queryData); } }; const layoutProps = { gutter: { xs: 8, sm: 8, lg: 16 }, lg: { span: 6 }, sm: { span: 12 }, xs: { span: 24 }, }; const layoutProps3 = { gutter: { xs: 8, sm: 8, lg: 16 }, lg: { span: 8 }, sm: { span: 12 }, xs: { span: 24 }, }; const [valueKey, setValueKey] = useState('SumML'); const [BulletConfig, setBulletConfig] = useState({ measureField: 'SumML', // rangeField: 'SumMLRange', // targetField: 'MLKPIvalue', // xField: 'groupsLabel', }); const handleChangeValueKey = (key) => { setValueKey(key); setBulletConfig({ measureField: key, rangeField: `${key}Range`, // targetField: `${key}KPI`, targetField: dataFieldAlias[key].nestkey.v, xField: 'groupsLabel', }); }; const WaterfallConfig = { xField: 'groupDateVal', yField: 'SumML', seriesField: 'groupsLabel', meta: { groupDateVal: { alias: '月份', // type: 'cat', }, }, label: { formatter: (v) => (summaryData.kpi.value === 0 ? dataFieldAlias.SumML?.formatter(v.SumML) || v.SumML : ((v.SumML / summaryData.kpi.value) * 100).toFixed(2) + '%'), }, }; const BUConfig = { measureField: 'SumML', // rangeField: 'SumMLRange', // targetField: 'MLKPIvalue', // xField: 'groupsLabel', layout: 'vertical', xAxis: { line: null, label: { autoHide: true, autoRotate: false, }, }, legend: false, }; const lineConfigSet = { // data: orders_data.data, padding: 'auto', xField: 'groupDateVal', yField: 'SumML', seriesField: 'groupsLabel', xAxis: { type: 'cat', }, smooth: true, point: { size: 4, shape: 'cicle', }, legend: false, meta: { ...cloneDeep(dataFieldAlias), }, }; const [timeDataField, setTimeDataField] = useState('SumML'); const [lineConfig, setLineConfig] = useState(cloneDeep(lineConfigSet)); const handleChangetimeDataField = (key) => { setTimeDataField(key); setLineConfig({ ...cloneDeep(lineConfig), yField: key, tooltip: { customItems: (originalItems) => { // process originalItems, const items = originalItems.map((ele) => ({ ...ele, name: ele.data?.extraLine ? ele.name : dataFieldAlias[key]?.alias || key })); return items; }, }, }); }; const [dateField, setDateField] = useState(timeLineKey); const handleChangeDateType = ({ target: { value } }) => { setDateField(value); TradeStore.setTimeLineKey(value); if (!isEmpty(TradeStore.searchPayloadHome)) { TradeStore.fetchTradeDataByDate({ groupType: groupTypeVal }); } }; return ( <> {/* style={{ margin: '-16px -8px', padding: 0 }} */} { TradeStore.setStateSearch(obj); pageRefresh(obj); }} />

年度业绩=传统+商务

{/* {summaryData.dataSource.map((item, i) => ( ))} */} {summaryData.dataSource.map((item, i) => ( ))}

走势

{/* */}

市场

<> {/* {overviewFlag ? ( <>

{`各事业部总业绩`}

) : ( <> )} */} {Object.keys(sideData.dataSource).sort().map((key) => (

{`${key}每月业绩`}

))}

英语区目标客户

TOP

{topSeriesSet.map((item) => item.graphVisible ? (

{item.label}

) : null )} ); });