From 64c388eff9a0c294b0d3c005e0b07fce151871f6 Mon Sep 17 00:00:00 2001 From: Lei OT Date: Sun, 8 Oct 2023 14:37:55 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=88=86=E5=B8=83:=20?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=90=8C=E6=AF=94,=20=E7=8E=AF=E6=AF=94?= =?UTF-8?q?=E7=9A=84=E5=8D=A0=E6=AF=94=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/Distribution.js | 13 +++++++++- src/views/Distribution.jsx | 52 +++++++++++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/stores/Distribution.js b/src/stores/Distribution.js index aa0b17a..0b6b256 100644 --- a/src/stores/Distribution.js +++ b/src/stores/Distribution.js @@ -89,7 +89,18 @@ class Distribution { this.curTab = v; } + setFormDates(param) { + // 环比的参数: 计算上一个时间段 + const [DateToQ1, DateToQ2] = [moment(param.Date1).subtract(moment(param.Date2).diff(param.Date1, 'days') + 1, 'days'), moment(param.Date1).subtract(1, 'days')]; + // 同比的参数: 去年同期 + const [DateToY1, DateToY2] = [moment(param.Date1).subtract(1, 'year'), moment(param.Date2).subtract(1, 'year')]; + this.dateStringY = `${DateToY1.format(DATE_FORMAT)}~${DateToY2.format(DATE_FORMAT)}`; + this.dateStringQ = `${DateToQ1.format(DATE_FORMAT)}~${DateToQ2.format(DATE_FORMAT)}`; + } + pageLoading = false; + dateStringY = ''; + dateStringQ = ''; detailData = { loading: false, dataSource: [] }; scatterDays = []; @@ -140,7 +151,7 @@ const calcDiff = ({ result, resultToY, resultToQ }) => { ConfirmOrderDiffY: resultMapped[row.key].ConfirmOrder - resultToYMapped[row.key].ConfirmOrder, ConfirmOrderDiffQ: resultMapped[row.key].ConfirmOrder - resultToQMapped[row.key].ConfirmOrder, }; - return { ...resultMapped[row.key], ...diff }; + return { ...resultMapped[row.key], ...diff, resultToY: resultToYMapped[row.key], resultToQ: resultToQMapped[row.key] }; }); // console.log(afterCalc, '=================='); return afterCalc; diff --git a/src/views/Distribution.jsx b/src/views/Distribution.jsx index faeb07d..4a527b7 100644 --- a/src/views/Distribution.jsx +++ b/src/views/Distribution.jsx @@ -26,7 +26,7 @@ const apartOptions = [ export default observer(() => { const { date_picker_store: searchFormStore, DistributionStore } = useContext(stores_Context); const { formValues, formValuesToSub } = searchFormStore; - const { curTab } = DistributionStore; + const { curTab, dateStringQ, dateStringY } = DistributionStore; const pageRefresh = (obj) => { DistributionStore.getApartData({ @@ -41,6 +41,7 @@ export default observer(() => { }, [curTab]); useEffect(() => { + DistributionStore.setFormDates(formValuesToSub); DistributionStore.resetData(); return () => {}; }, [formValuesToSub]); @@ -54,6 +55,19 @@ export default observer(() => { autoFit: false, color: ['#5B8FF9', '#E8EDF3'], }; + const RingProgressConfigY = { + height: 50, + width: 50, + autoFit: false, + // color: ['#f6bd16', '#E8EDF3'], + color: ['#61ddaa', '#E8EDF3'], // #7cb305 + }; + const RingProgressConfigQ = { + height: 50, + width: 50, + autoFit: false, + color: ['#f6bd16', '#E8EDF3'], + }; const columns = [ { title: '', dataIndex: 'label' }, { @@ -112,6 +126,42 @@ export default observer(() => { dataIndex: 'SumMLPercent', render: (v, r) => , }, + { + title: () => <>
去年同期
{dateStringY}
, + align: 'center', + children: [ + { + title: '团数占比', + width: 90, + dataIndex: 'ConfirmOrderPercent', + render: (v, r) => , + }, + { + title: '业绩占比', + width: 90, + dataIndex: 'SumMLPercent', + render: (v, r) => , + }, + ], + }, + { + title: () => <>
上个时间段
{dateStringQ}
, + align: 'center', + children: [ + { + title: '团数占比', + width: 90, + dataIndex: 'ConfirmOrderPercent', + render: (v, r) => , + }, + { + title: '业绩占比', + width: 90, + dataIndex: 'SumMLPercent', + render: (v, r) => , + }, + ], + }, ]; return ( <> From 8656548a1932411011f874d083d2513b89a20412 Mon Sep 17 00:00:00 2001 From: Lei OT Date: Sun, 8 Oct 2023 16:56:50 +0800 Subject: [PATCH 02/13] =?UTF-8?q?fix:=20=E6=90=9C=E7=B4=A2=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/search/Input.jsx | 9 +++++---- src/components/search/SearchForm.jsx | 11 +++++++++-- src/stores/DatePickerStore.js | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/search/Input.jsx b/src/components/search/Input.jsx index ec92225..abb869b 100644 --- a/src/components/search/Input.jsx +++ b/src/components/search/Input.jsx @@ -63,7 +63,8 @@ class SearchInput extends React.Component { componentDidMount() { if (this.props.autoGet === true) { - const { map, resultkey, param } = this.props; + const { map, resultkey, dependenciesFun } = this.props; + const param = typeof dependenciesFun === 'function' ? dependenciesFun() : {}; const mapKey = Object.keys(map).reduce((r, v) => ({ ...r, [v]: { key: map[v] } }), {}); curl({ value: '', url: this.props.url || '', map: mapKey, resultkey, param }, (data) => this.setState({ data, autoData: data }, () => (typeof this.props.onSearchAfter === 'function' ? this.props.onSearchAfter(data, this.state.value) : '')) @@ -87,7 +88,8 @@ class SearchInput extends React.Component { this.setState({ data: f || [] }); return false; } - const { map, resultkey, param } = this.props; + const { map, resultkey, dependenciesFun } = this.props; + const param = typeof dependenciesFun === 'function' ? dependenciesFun() : {}; const mapKey = Object.keys(map).reduce((r, v) => ({ ...r, [v]: { key: map[v] } }), {}); if (value) { curl({ value, url: this.props.url || '', map: mapKey, resultkey, param }, (data) => @@ -99,13 +101,12 @@ class SearchInput extends React.Component { }; handleChange = (value, option) => { - // console.log('invoke denpendencies change', value); this.setState({ value }, () => this.props.onChange(value, option)); }; render() { const options = this.state.data.map(d => ); - const { onSearchAfter, defaultOptions, autoGet, ...props } = this.props; + const { onSearchAfter, defaultOptions, autoGet, dependenciesFun, ...props } = this.props; return ( diff --git a/src/libs/ht.js b/src/libs/ht.js index 167a2b7..b3e840a 100644 --- a/src/libs/ht.js +++ b/src/libs/ht.js @@ -95,6 +95,7 @@ export const dateTypes = [ * 结果字段 */ export const dataFieldOptions = [ + { label: '营收', value: 'transactions', formatter: (v) => `${v / 10000} 万`, nestkey: { p: 'transactionsKPIrates', v: 'transactionsKPIvalue' } }, { label: '毛利', value: 'SumML', formatter: (v) => `${v / 10000} 万`, nestkey: { p: 'MLKPIrates', v: 'MLKPIvalue' } }, { label: '订单数', value: 'SumOrder', formatter: (v) => v, nestkey: { p: 'OrderKPIrates', v: 'OrderKPIvalue' } }, { label: '成交数', value: 'ConfirmOrder', formatter: (v) => v, nestkey: { p: 'ConfirmOrderKPIrates', v: 'ConfirmOrderKPIvalue' } }, diff --git a/src/views/Home.jsx b/src/views/Home.jsx index e9c8f0b..6033c83 100644 --- a/src/views/Home.jsx +++ b/src/views/Home.jsx @@ -226,7 +226,7 @@ export default observer(() => {
-

目标客户 +

英语区目标客户 From 1d76cbcc740f3e5b3aa66d2d427f25765ef13aee Mon Sep 17 00:00:00 2001 From: Lei OT Date: Mon, 9 Oct 2023 16:14:41 +0800 Subject: [PATCH 11/13] style: --- src/views/Distribution.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/Distribution.jsx b/src/views/Distribution.jsx index 9e9cc71..026d8b6 100644 --- a/src/views/Distribution.jsx +++ b/src/views/Distribution.jsx @@ -78,7 +78,7 @@ export default observer(() => { render: (v, r) => ( <> - + {v}From 48a4010fc9ef4118b336cb49f995586abecf605a Mon Sep 17 00:00:00 2001 From: Lei OT Date: Tue, 10 Oct 2023 11:28:00 +0800 Subject: [PATCH 12/13] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=9B=BD?= =?UTF-8?q?=E5=86=85=E5=A4=96=E5=8D=A0=E6=AF=94;=20=0Bperf:=20=E9=A6=96?= =?UTF-8?q?=E9=A1=B5:=20=E8=B5=B0=E5=8A=BF=E5=9B=BE=E4=B8=AD=E7=9A=84KPI?= =?UTF-8?q?=E7=BA=BF;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Donut.jsx | 84 ++++++++++++++++++++++++++++++++++ src/components/LineWithKPI.jsx | 2 +- src/components/Waterfall.jsx | 4 +- src/libs/ht.js | 6 ++- src/stores/Trade.js | 15 ++++-- src/views/Home.jsx | 58 +++++++++++++++-------- src/views/home.css | 3 ++ 7 files changed, 143 insertions(+), 29 deletions(-) create mode 100644 src/components/Donut.jsx diff --git a/src/components/Donut.jsx b/src/components/Donut.jsx new file mode 100644 index 0000000..a18447a --- /dev/null +++ b/src/components/Donut.jsx @@ -0,0 +1,84 @@ +import { observer } from 'mobx-react'; +import { Pie, measureTextWidth } from '@ant-design/plots'; +import { fixTo2Decimals, merge } from '../utils/commons'; +import { dataFieldAlias } from './../libs/ht'; + +export default observer((props) => { + const { dataSource, title, ...extProps } = props; + + const renderStatistic = (containerWidth, text, style) => { + const { width: textWidth, height: textHeight } = measureTextWidth(text, style); + const R = containerWidth / 2; // r^2 = (w / 2)^2 + (h - offsetY)^2 + let scale = 1; + if (containerWidth < textWidth) { + scale = Math.min(Math.sqrt(Math.abs(Math.pow(R, 2) / (Math.pow(textWidth / 2, 2) + Math.pow(textHeight, 2)))), 1); + } + const textStyleStr = `width:${containerWidth}px;`; + return `
${text}
`; + }; + + const config = merge( + { + appendPadding: 10, + // angleField: 'value', + // colorField: 'type', + radius: 0.7, + innerRadius: 0.65, + label: { + type: 'inner', + offset: '-50%', + autoRotate: false, + // content: '{value}', + content: ({ percent }) => `${fixTo2Decimals(percent * 100)}%`, + style: { + textAlign: 'center', + fontSize: 14, + }, + }, + interactions: [{ type: 'element-selected' }, { type: 'element-active' }, { type: 'pie-statistic-active' }], + statistic: { + title: { + offsetY: -4, + customHtml: (container, view, datum) => { + const { width, height } = container.getBoundingClientRect(); + const d = Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2)); + const text = datum ? datum[extProps.colorField] : (title || ''); + return renderStatistic(d, text, { + fontSize: '28px', + }); + }, + }, + content: { + // style: { + // whiteSpace: 'pre-wrap', + // overflow: 'hidden', + // textOverflow: 'ellipsis', + // }, + // content: title || '', + offsetY: 4, + style: { + fontSize: '28px', + }, + customHtml: (container, view, datum, data) => { + const { width } = container.getBoundingClientRect(); + const _sum = data.reduce((r, d) => r + d[extProps.angleField], 0); + const showVal = datum ? datum[extProps.angleField] : _sum; + const text = dataFieldAlias[extProps.angleField].formatter(showVal); + return renderStatistic(width, text, { + fontSize: '28px', + }); + }, + + }, + }, + meta: { + [extProps.angleField]: { + alias: dataFieldAlias[extProps.angleField]?.alias || extProps.angleField, + formatter: (v) => dataFieldAlias[extProps.angleField]?.formatter(v) || v, + }, + }, + }, + extProps + ); + return ; +}); diff --git a/src/components/LineWithKPI.jsx b/src/components/LineWithKPI.jsx index ee8a813..50d196a 100644 --- a/src/components/LineWithKPI.jsx +++ b/src/components/LineWithKPI.jsx @@ -24,7 +24,7 @@ const uniqueByKey = (array, key, pickLast) => { }; export default observer((props) => { - const { config, dataSource, ...extProps } = props; + const { dataSource, ...config } = props; const kpiKey = dataFieldAlias[config.yField]?.nestkey?.v; const _data = dataSource.reduce((r, v) => { r.push(v); diff --git a/src/components/Waterfall.jsx b/src/components/Waterfall.jsx index 87bf2ec..9e55075 100644 --- a/src/components/Waterfall.jsx +++ b/src/components/Waterfall.jsx @@ -1,7 +1,7 @@ import { observer } from 'mobx-react'; import { Waterfall } from '@ant-design/plots'; import { dataFieldAlias } from './../libs/ht'; -import { merge } from '../utils/commons'; +import { fixTo4Decimals, merge } from '../utils/commons'; export default observer((props) => { const { dataSource, line, title, ...extProps } = props; @@ -11,7 +11,7 @@ export default observer((props) => { { type: 'text', position: ['start', line.value], - content: `${line.label} ${line.value / 10000} 万`, + content: `${line.label} ${fixTo4Decimals(line.value / 10000)} 万`, // offsetX: -15, style: { fill: '#F4664A', diff --git a/src/libs/ht.js b/src/libs/ht.js index b3e840a..c7274c1 100644 --- a/src/libs/ht.js +++ b/src/libs/ht.js @@ -1,3 +1,5 @@ +import { fixTo4Decimals } from "../utils/commons"; + /** * 事业部 */ @@ -95,8 +97,8 @@ export const dateTypes = [ * 结果字段 */ export const dataFieldOptions = [ - { label: '营收', value: 'transactions', formatter: (v) => `${v / 10000} 万`, nestkey: { p: 'transactionsKPIrates', v: 'transactionsKPIvalue' } }, - { label: '毛利', value: 'SumML', formatter: (v) => `${v / 10000} 万`, nestkey: { p: 'MLKPIrates', v: 'MLKPIvalue' } }, + { label: '营收', value: 'transactions', formatter: (v) => `${fixTo4Decimals(v / 10000)} 万`, nestkey: { p: 'transactionsKPIrates', v: 'transactionsKPIvalue' } }, + { label: '毛利', value: 'SumML', formatter: (v) => `${fixTo4Decimals(v / 10000)} 万`, nestkey: { p: 'MLKPIrates', v: 'MLKPIvalue' } }, { label: '订单数', value: 'SumOrder', formatter: (v) => v, nestkey: { p: 'OrderKPIrates', v: 'OrderKPIvalue' } }, { label: '成交数', value: 'ConfirmOrder', formatter: (v) => v, nestkey: { p: 'ConfirmOrderKPIrates', v: 'ConfirmOrderKPIvalue' } }, { label: '成交率', value: 'ConfirmRates', formatter: (v) => `${v} %`, nestkey: { p: 'ConfirmRatesKPIrates', v: 'ConfirmRatesKPIvalue' } }, diff --git a/src/stores/Trade.js b/src/stores/Trade.js index 5f9cf55..0d41bc3 100644 --- a/src/stores/Trade.js +++ b/src/stores/Trade.js @@ -54,9 +54,9 @@ class Trade { /** * 时间轴 */ - fetchTradeDataByDate(queryData) { + fetchTradeDataByDate(queryData = {}) { this.timeData.loading = true; - queryData = queryData || this.searchPayloadHome; + queryData = Object.assign({}, this.searchPayloadHome, queryData); // queryData || this.searchPayloadHome; queryData.groupType = queryData?.groupType || 'overview'; Object.assign(queryData, { groupDateType: this.timeLineKey }); this.fetchTradeData(queryData).then((json) => { @@ -123,10 +123,17 @@ class Trade { } return r; }, {}); + const summaryData = Object.keys(groupsData).map(groupsKey => { + return ['ConfirmOrder', 'SumOrder', 'SumML', 'transactions', 'SumPersonNum'].reduce( + (r, skey) => ({ ...r, [skey]: groupsData[groupsKey].reduce((a, c) => a + c[skey], 0) }), + groupsData[groupsKey]?.[0] || {} + ); + }); runInAction(() => { this.sideData.loading = false; this.sideData.dataSource = groupsData; this.sideData.monthData = sortResult; + this.sideData.yearData = summaryData; }); } }); @@ -197,7 +204,7 @@ class Trade { this.summaryData = { loading: false, dataSource: [], kpi: {}, }; this.timeData = { loading: false, dataSource: [] }; this.BuData = { loading: false, dataSource: [] }; - this.sideData = { loading: false, dataSource: {}, monthData: [] }; + this.sideData = { loading: false, dataSource: {}, monthData: [], yearData: [] }; this.topData = {}; this.targetData = { targetTotal: {}, targetCountry: {}, targetGuest: {} }; this.targetTableProps.dataSource = []; @@ -207,7 +214,7 @@ class Trade { summaryData = { loading: false, dataSource: [], kpi: {}, }; timeData = { loading: false, dataSource: [] }; BuData = { loading: false, dataSource: [] }; - sideData = { loading: false, dataSource: {}, monthData: [] }; + sideData = { loading: false, dataSource: {}, monthData: [], yearData: [] }; topData = {}; targetData = { targetTotal: {}, targetCountry: {}, targetGuest: {} }; targetTableProps = { loading: false, columns: [ diff --git a/src/views/Home.jsx b/src/views/Home.jsx index 6033c83..200ab4f 100644 --- a/src/views/Home.jsx +++ b/src/views/Home.jsx @@ -8,6 +8,7 @@ import StatisticCard from '../components/StatisticCard'; 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'; @@ -17,9 +18,9 @@ import { Line } from '@ant-design/charts'; import './home.css'; const topSeries = [ - { key: 'country', label: '国籍', graphVisible: true }, { 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 }, ]; @@ -40,15 +41,23 @@ export default observer(() => { 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(','); - queryData.groupType = overviewFlag ? 'overview' : 'dept'; + const _overviewFlag = queryData.DepartmentList.toLowerCase() === 'all' || queryData.DepartmentList.toLowerCase().includes(','); + const groupType = _overviewFlag ? 'overview' : 'dept'; + queryData.groupType = groupType; + setGroupTypeVal(groupType); TradeStore.resetData(); - TradeStore.fetchSummaryData(queryData); + TradeStore.fetchSummaryData(Object.assign({}, queryData, { groupType })); TradeStore.fetchTradeDataByDate(queryData); TradeStore.fetchTradeDataByBU(queryData); TradeStore.fetchTradeDataByMonth(queryData); - for (const iterator of topSeries) { + const topSeriesF = _overviewFlag ? topSeries : topSeries.filter(ele => ele.key !== 'dept'); + setTopSeriesSet(topSeriesF); + setOverviewFlag(_overviewFlag); + for (const iterator of topSeriesF) { TradeStore.fetchTradeDataByType(iterator.key, queryData); } }; @@ -156,12 +165,12 @@ export default observer(() => { setDateField(value); TradeStore.setTimeLineKey(value); if (!isEmpty(TradeStore.searchPayloadHome)) { - TradeStore.fetchTradeDataByDate(); + TradeStore.fetchTradeDataByDate({groupType: groupTypeVal}); } }; return ( <> - + {/* style={{ margin: '-16px -8px', padding: 0 }} */}
{ {/* */} - +
-

市场进度

+

市场

- -

{`各事业部总业绩`}

+ {overviewFlag ? ( + <> + +

{`各事业部总业绩`}

+ + ) : ( + <> + )} {Object.keys(sideData.dataSource).map((key) => (
@@ -226,7 +241,8 @@ export default observer(() => {
-

英语区目标客户 +

+ 英语区目标客户

@@ -240,14 +256,16 @@ export default observer(() => { - {topSeries.map((item) => item.graphVisible ? ( - - -

{item.label}

- -
- - ) : null)} + {topSeriesSet.map((item) => + item.graphVisible ? ( + + +

{item.label}

+ +
+ + ) : null + )} diff --git a/src/views/home.css b/src/views/home.css index 2713a7b..0175da4 100644 --- a/src/views/home.css +++ b/src/views/home.css @@ -1,3 +1,6 @@ +.__hn-sta-wrapper .ant-statistic-title{ + color: rgb(0, 0, 0, .45); +} .__hn-sta-wrapper .ant-statistic-content-suffix{ float: right; font-size: 18px; From 128efd1baed054fec416c19742e93e565160e6bf Mon Sep 17 00:00:00 2001 From: Lei OT Date: Tue, 10 Oct 2023 13:55:35 +0800 Subject: [PATCH 13/13] =?UTF-8?q?KPI=20=E8=AE=BE=E7=BD=AE=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=95=B0;=20=E6=8C=87=E6=A0=87=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/BulletWithSort.jsx | 9 +++------ src/libs/ht.js | 8 ++++---- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/components/BulletWithSort.jsx b/src/components/BulletWithSort.jsx index a4176d4..3821709 100644 --- a/src/components/BulletWithSort.jsx +++ b/src/components/BulletWithSort.jsx @@ -4,10 +4,6 @@ import { Bullet } from '@ant-design/plots'; import { sortBy, merge } from '../utils/commons'; import { dataFieldAlias } from '../libs/ht'; -// const layoutLabel = { -// 'vertical': -// }; - export default observer((props) => { const { dataSource, itemLength, ...extProps } = props; // 处理进度图的数据格式, number -> array @@ -30,8 +26,9 @@ export default observer((props) => { const config = merge({ color: { - range: [ '#FFF3E1', '#FFF3E1', '#FFe0b0', '#bfeec8'], // '#FFbcb8', '#FFe0b0', - measure: '#5B8FF9', + range: [ '#FFF3E1', '#FFF3E1'], + // range: [ '#FFF3E1', '#FFF3E1', '#FFe0b0', '#bfeec8'], // '#FFbcb8', '#FFe0b0', + measure: ['#5B8FF9', '#61ddaa'], target: '#FF9845', }, label: { diff --git a/src/libs/ht.js b/src/libs/ht.js index c7274c1..b58f8e6 100644 --- a/src/libs/ht.js +++ b/src/libs/ht.js @@ -159,9 +159,9 @@ export const KPISubjects = [ { key: 'sum_profit', value: 'sum_profit', label: '毛利' }, { key: 'in_order_count', value: 'in_order_count', label: '订单数' }, { key: 'confirm_order_count', value: 'confirm_order_count', label: '成团' }, - { key: 'depart_order_count', value: 'depart_order_count', label: '走团' }, - { key: 'confirm_rates', value: 'confirm_rates', label: '成型率' }, - { key: 'praise_rates', value: 'praise_rates', label: '表扬率' }, + // { key: 'depart_order_count', value: 'depart_order_count', label: '走团' }, // 根据日期类型 + { key: 'confirm_rates', value: 'confirm_rates', label: '成行率' }, + // { key: 'praise_rates', value: 'praise_rates', label: '表扬率' }, // { key: 'first_reply_rates', value: 'first_reply_rates', label: '首报回复率'}, // { key: 'quote_rates', value: 'quote_rates', label: '报价率'}, // { key: 'first_post_time', value: 'first_post_time', label: '订单到首邮发送时间'}, @@ -169,5 +169,5 @@ export const KPISubjects = [ // { key: 'reply_rates_wa', value: 'reply_rates_wa', label: 'WA回复率'}, // { key: 'reply_eff_wechat', value: 'reply_eff_wechat', label: '微信回复效率'}, // { key: 'reply_eff_wa', value: 'reply_eff_wa', label: 'WA回复效率'}, - { key: 'sum_person_num', value: 'sum_person_num', label: '人数' }, + // { key: 'sum_person_num', value: 'sum_person_num', label: '人数' }, ];