From 046e48810ee5d50c892246af107c8bee78a6ab25 Mon Sep 17 00:00:00 2001 From: Lei OT Date: Wed, 19 Nov 2025 10:09:48 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=95=86=E5=8A=A1:=20=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 5 ++- src/libs/ht.js | 5 +++ src/views/biz/BizOrder.jsx | 56 +++++++++++++++++++------- src/views/biz/reports/TrainsUpsell.jsx | 21 ++++++++-- src/zustand/Trains.js | 4 +- 5 files changed, 69 insertions(+), 22 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index ddbe4ca..fd78c86 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -10,7 +10,8 @@ import { CoffeeOutlined, DesktopOutlined, WhatsAppOutlined, ShoppingCartOutlined, - GiftOutlined + GiftOutlined, + RocketOutlined } from '@ant-design/icons'; import { Layout, Menu, Button } from 'antd'; import { BrowserRouter, Route, Routes, NavLink } from 'react-router-dom'; @@ -103,7 +104,7 @@ const App = () => { ], }, { - key: 20, label: '商旅市场', icon: , + key: 20, label: '商务市场', icon: , children: [ { key: 201, label: 订单数据 }, { key: 202, label: TrainsUpsell }, diff --git a/src/libs/ht.js b/src/libs/ht.js index a31a071..d584d37 100644 --- a/src/libs/ht.js +++ b/src/libs/ht.js @@ -61,6 +61,11 @@ export const groupsMappedByCode = groups.reduce((a, c) => ({ ...a, [String(c.cod export const groupsMappedByKey = groups.reduce((a, c) => ({ ...a, [String(c.key)]: c }), {}); export const leafGroup = groups.slice(3); export const overviewGroup = groups.slice(0, 3); // todo: 花梨鹰 APP Trippest +export const groupsCTplus = [ + // { value: '10,18', key: '10,18', label: 'CT商旅', code: 'CT+', children: [10, 18,] }; + { value: '18', key: '18', label: 'CT', code: 'CT', children: [] }, + { value: '10', key: '10', label: '商旅', code: '', children: [] }, +]; /** * 来源 */ diff --git a/src/views/biz/BizOrder.jsx b/src/views/biz/BizOrder.jsx index f3fd429..8c194a1 100644 --- a/src/views/biz/BizOrder.jsx +++ b/src/views/biz/BizOrder.jsx @@ -1,7 +1,7 @@ import { useContext } from 'react'; -import { Row, Col, Tabs, Table, Divider, Spin } from 'antd'; +import { Row, Col, Tabs, Table, Divider, Spin, Checkbox, Space } from 'antd'; import { ContainerOutlined, BlockOutlined, SmileOutlined, MobileOutlined, CustomerServiceOutlined } from '@ant-design/icons'; -import { Line } from '@ant-design/charts'; +import { Line, Pie } from '@ant-design/charts'; import { NavLink } from 'react-router-dom'; import * as comm from '../../utils/commons'; import DateGroupRadio from '../../components/DateGroupRadio'; @@ -94,7 +94,27 @@ const BizOrder = observer(() => { return ret; }, }, - smooth: true, + // smooth: true, + }; + const pieConfig = { + appendPadding: 10, + data: [], + angleField: 'OrderCount', + colorField: 'OrderType', + radius: 0.8, + label: { + type: 'outer', + content: '{name} {value} \n {percentage}', + }, + legend: false, // 不显示图例 + interactions: [ + { + type: 'element-selected', + }, + { + type: 'element-active', + }, + ], }; const tableProps = { @@ -111,9 +131,7 @@ const BizOrder = observer(() => { {showDiff ?
{result.ordercountTotal2?.groups}
: null} ), - titleX: - `${result.ordercountTotal1?.groups}` + - (showDiff ? ` vs ${result.ordercountTotal2?.groups}` : ''), + titleX: `${result.ordercountTotal1?.groups}` + (showDiff ? ` vs ${result.ordercountTotal2?.groups}` : ''), dataIndex: 'OrderType', fixed: 'left', render: (text, record) => {text}, @@ -395,14 +413,24 @@ const BizOrder = observer(() => { }; })} /> - - - {/* */} - - - {/* */} - - + + + +
+

各项占比

+ {/* setIsShowEmpty(e.target.checked)} + > + 包含空值 + */} +
+ + + + + + diff --git a/src/views/biz/reports/TrainsUpsell.jsx b/src/views/biz/reports/TrainsUpsell.jsx index 7716df7..a22402a 100644 --- a/src/views/biz/reports/TrainsUpsell.jsx +++ b/src/views/biz/reports/TrainsUpsell.jsx @@ -16,18 +16,19 @@ const buildFunnelData = (data1, data2) => { const data01 = [ { stage: '火车票预定', number: data1?.data?.[0]?.OrderCount, dateRange: data1?.dateRangeStr }, { stage: '成行出票', number: data1?.data?.[0]?.CJCount, dateRange: data1?.dateRangeStr }, - { stage: '火车票upsell', number: (data1?.data?.[1]?.OrderCount || 0) + 0, dateRange: data1?.dateRangeStr }, - { stage: '成行', number: data1?.data?.[1]?.CJCount, dateRange: data1?.dateRangeStr }, + { stage: '火车票Upsell', number: (data1?.data?.[1]?.OrderCount || 0) + 0, dateRange: data1?.dateRangeStr }, + { stage: 'Upsell成行', number: data1?.data?.[1]?.CJCount, dateRange: data1?.dateRangeStr }, ]; const data02 = !comm.isEmpty(data2) ? [ { stage: '火车票预定', number: data2?.data?.[0]?.OrderCount, dateRange: data2?.dateRangeStr }, { stage: '成行出票', number: data2?.data?.[0]?.CJCount, dateRange: data2?.dateRangeStr }, - { stage: '火车票upsell', number: data2?.data?.[1]?.OrderCount, dateRange: data2?.dateRangeStr }, - { stage: '成行', number: data2?.data?.[1]?.CJCount, dateRange: data2?.dateRangeStr }, + { stage: '火车票Upsell', number: data2?.data?.[1]?.OrderCount, dateRange: data2?.dateRangeStr }, + { stage: 'Upsell成行', number: data2?.data?.[1]?.CJCount, dateRange: data2?.dateRangeStr }, ] : []; return data01.concat(data02); + // return data02.concat(data01); }; @@ -50,6 +51,18 @@ const TrainsUpsell = observer(({ ...props }) => { compareField: showDiff ? 'dateRange' : false, // isTransposed: true, legend: false, + // tooltip: { + // shared: true, + // showMarkers: false, + // showTitle: false, + // }, + label: { + position: 'right', + // offsetX: 10, + style: { + fill: '#002c45', + }, + }, shape: 'pyramid', theme: { colors10: [ diff --git a/src/zustand/Trains.js b/src/zustand/Trains.js index af8ae85..356b4f8 100644 --- a/src/zustand/Trains.js +++ b/src/zustand/Trains.js @@ -1,7 +1,7 @@ import { create } from 'zustand'; import { devtools } from 'zustand/middleware'; import { immer } from 'zustand/middleware/immer'; -import { groupsMappedByCode } from '../libs/ht'; +import { groupsCTplus, groupsMappedByCode } from '../libs/ht'; import { fetchJSON } from '../utils/request'; import { HT_HOST } from '../config'; import { resultDataCb } from '../components/DateGroupRadio/date'; @@ -106,7 +106,7 @@ const initialState = { DateType: { key: 'applyDate', label: '提交日期' }, WebCode: { key: 'all', label: '所有来源' }, IncludeTickets: { key: '1', label: '含门票' }, - DepartmentList: groupsMappedByCode.CTX, // { key: 'All', label: '所有来源' }, // + DepartmentList: groupsCTplus, // groupsMappedByCode.CTX, // { key: 'All', label: '所有来源' }, // }, searchValuesToSub: { DateType: 'applyDate',