diff --git a/src/stores/CustomerServices.js b/src/stores/CustomerServices.js
index 1e05bc3..e8fb2aa 100644
--- a/src/stores/CustomerServices.js
+++ b/src/stores/CustomerServices.js
@@ -3,7 +3,7 @@ import moment from "moment";
import { NavLink } from "react-router-dom";
import * as config from "../config";
import * as req from '../utils/request';
-import { groupBy, prepareUrl } from '../utils/commons';
+import { groupBy, prepareUrl, isEmpty, show_vs_tag, formatPercent, percentToDecimal } from '../utils/commons';
class CustomerServices {
@@ -53,113 +53,264 @@ class CustomerServices {
.then(json => {
if (json.errcode === 0) {
runInAction(() => {
- const splitTotalList = groupBy(json.result1, row => row.EOI_ObjSN === -1 ? '0' : '1');
- this.agentGroupList = splitTotalList['1'];
- const total1 = splitTotalList['0']?.[0] || {}; // json.total1;
- this.agentGroupListColumns = [
- {
- title: '地接社名称',
- dataIndex: 'VendorName',
- fixed: 'left',
- children: [{
- // title: this.startDate.format(config.DATE_FORMAT) + '~' + this.endDate.format(config.DATE_FORMAT),
- dataIndex: 'VendorName',
- fixed: 'left',
- render: (text, record) => {record.VendorName}
- }
- ]
- },
- {
- title: '团数',
- dataIndex: 'GroupCount',
- sorter: (a, b) => a.GroupCount - b.GroupCount,
- children: [{
- title: total1.GroupCount,
- dataIndex: 'GroupCount'
- }
- ]
- },
- {
- title: '人数',
- dataIndex: 'PersonNum',
- sorter: (a, b) => a.PersonNum - b.PersonNum,
- children: [{
- title: total1.PersonNum,
- dataIndex: 'PersonNum'
- }
- ]
- },
- {
- title: '团天数',
- dataIndex: 'GroupDays',
- sorter: (a, b) => a.GroupDays - b.GroupDays,
- children: [{
- title: total1.GroupDays,
- dataIndex: 'GroupDays'
- }
- ]
- },
- {
- title: '交易额',
- dataIndex: 'totalcost',
- sorter: (a, b) => a.totalcost - b.totalcost,
- children: [{
- title: total1.totalcost,
- dataIndex: 'totalcost'
- }
- ]
- },
- {
- title: '前勤分',
- dataIndex: 'qianqin',
- sorter: (a, b) => a.qianqin - b.qianqin,
- children: [{
- title: total1.qianqin,
- dataIndex: 'qianqin'
- }
- ]
- },
- {
- title: '好评数',
- dataIndex: 'GoodCount',
- sorter: (a, b) => a.GoodCount - b.GoodCount,
- children: [{
- title: total1.GoodCount,
- dataIndex: 'GoodCount'
- }
- ]
- },
- {
- title: '好评率',
- dataIndex: 'GoodRate',
- sorter: (a, b) => parseInt(a.GoodRate) - parseInt(b.GoodRate),
- children: [{
- title: total1.GoodRate,
- dataIndex: 'GoodRate'
- }
- ]
- },
- {
- title: '差评数',
- dataIndex: 'BadCount',
- sorter: (a, b) => a.BadCount - b.BadCount,
- children: [{
- title: total1.BadCount,
- dataIndex: 'BadCount'
- }
- ]
- },
- {
- title: '差评率',
- dataIndex: 'BadRate',
- sorter: (a, b) => parseInt(a.BadRate) - parseInt(b.BadRate),
- children: [{
- title: total1.BadRate,
- dataIndex: 'BadRate'
+ if (isEmpty(json.result2)){
+ const splitTotalList = groupBy(json.result1, row => row.EOI_ObjSN === -1 ? '0' : '1');
+ this.agentGroupList = splitTotalList['1'];
+ const total1 = splitTotalList['0']?.[0] || {}; // json.total1;
+ this.agentGroupListColumns = [
+ {
+ title: '地接社名称',
+ dataIndex: 'VendorName',
+ fixed: 'left',
+ children: [{
+ // title: this.startDate.format(config.DATE_FORMAT) + '~' + this.endDate.format(config.DATE_FORMAT),
+ dataIndex: 'VendorName',
+ fixed: 'left',
+ render: (text, record) => {record.VendorName}
+ }
+ ]
+ },
+ {
+ title: '团数',
+ dataIndex: 'GroupCount',
+ sorter: (a, b) => a.GroupCount - b.GroupCount,
+ children: [{
+ title: total1.GroupCount,
+ dataIndex: 'GroupCount'
+ }
+ ]
+ },
+ {
+ title: '人数',
+ dataIndex: 'PersonNum',
+ sorter: (a, b) => a.PersonNum - b.PersonNum,
+ children: [{
+ title: total1.PersonNum,
+ dataIndex: 'PersonNum'
+ }
+ ]
+ },
+ {
+ title: '团天数',
+ dataIndex: 'GroupDays',
+ sorter: (a, b) => a.GroupDays - b.GroupDays,
+ children: [{
+ title: total1.GroupDays,
+ dataIndex: 'GroupDays'
+ }
+ ]
+ },
+ {
+ title: '交易额',
+ dataIndex: 'totalcost',
+ sorter: (a, b) => a.totalcost - b.totalcost,
+ children: [{
+ title: total1.totalcost,
+ dataIndex: 'totalcost'
+ }
+ ]
+ },
+ {
+ title: '前勤分',
+ dataIndex: 'qianqin',
+ sorter: (a, b) => a.qianqin - b.qianqin,
+ children: [{
+ title: total1.qianqin,
+ dataIndex: 'qianqin'
+ }
+ ]
+ },
+ {
+ title: '好评数',
+ dataIndex: 'GoodCount',
+ sorter: (a, b) => a.GoodCount - b.GoodCount,
+ children: [{
+ title: total1.GoodCount,
+ dataIndex: 'GoodCount'
+ }
+ ]
+ },
+ {
+ title: '好评率',
+ dataIndex: 'GoodRate',
+ sorter: (a, b) => parseInt(a.GoodRate) - parseInt(b.GoodRate),
+ children: [{
+ title: total1.GoodRate,
+ dataIndex: 'GoodRate'
+ }
+ ]
+ },
+ {
+ title: '差评数',
+ dataIndex: 'BadCount',
+ sorter: (a, b) => a.BadCount - b.BadCount,
+ children: [{
+ title: total1.BadCount,
+ dataIndex: 'BadCount'
+ }
+ ]
+ },
+ {
+ title: '差评率',
+ dataIndex: 'BadRate',
+ sorter: (a, b) => parseInt(a.BadRate) - parseInt(b.BadRate),
+ children: [{
+ title: total1.BadRate,
+ dataIndex: 'BadRate'
+ }
+ ]
+ }
+ ];
+
+ }
+ else{
+ const splitTotalList1 = groupBy(json.result1, row => row.EOI_ObjSN === -1 ? '0' : '1');
+ const splitTotalList2 = groupBy(json.result2, row => row.EOI_ObjSN === -1 ? '0' : '1');
+ const result = [];
+ for (const item1 of splitTotalList1['1']) {
+ for (const item2 of splitTotalList2['1']) {
+ if (item1.EOI_ObjSN === item2.EOI_ObjSN) {
+ const goodRate1 = percentToDecimal(item1.GoodRate);
+ const goodRate2 = percentToDecimal(item2.GoodRate);
+ const badRate1 = percentToDecimal(item1.BadRate);
+ const badRate2 = percentToDecimal(item2.BadRate);
+ result.push({
+ EOI_ObjSN: item1.EOI_ObjSN,
+ VendorName: item1.VendorName,
+ GroupCount: show_vs_tag(formatPercent((item1.GroupCount-item2.GroupCount)/item2.GroupCount),item1.GroupCount-item2.GroupCount,item1.GroupCount,item2.GroupCount),
+ PersonNum: show_vs_tag(formatPercent((item1.PersonNum-item2.PersonNum)/item2.PersonNum),item1.PersonNum-item2.PersonNum,item1.PersonNum,item2.PersonNum),
+ GroupDays: show_vs_tag(formatPercent((item1.GroupDays-item2.GroupDays)/item2.GroupDays),item1.GroupDays-item2.GroupDays,item1.GroupDays,item2.GroupDays),
+ totalcost: show_vs_tag(formatPercent((item1.totalcost-item2.totalcost)/item2.totalcost),
+ (item1.totalcost-item2.totalcost).toFixed(2),item1.totalcost,item2.totalcost),
+ GoodCount: show_vs_tag(formatPercent((item1.GoodCount-item2.GoodCount)/item2.GoodCount),item1.GoodCount-item2.GoodCount,item1.GoodCount,item2.GoodCount),
+ GoodRate: show_vs_tag(formatPercent((goodRate1-goodRate2)/goodRate2),formatPercent(goodRate1-goodRate2),item1.GoodRate,item2.GoodRate),
+ BadCount: show_vs_tag(formatPercent((item1.BadCount-item2.BadCount)/item2.BadCount),item1.BadCount-item2.BadCount,item1.BadCount,item2.BadCount),
+ BadRate: show_vs_tag(formatPercent((badRate1-badRate2)/badRate2),formatPercent(badRate1-badRate2),item1.BadRate,item2.BadRate),
+ qianqin: show_vs_tag(formatPercent((item1.qianqin-item2.qianqin)/item2.qianqin),(item1.qianqin-item2.qianqin).toFixed(2),item1.qianqin,item2.qianqin),
+ key:item1.key,
+ });
}
- ]
+ }
}
- ];
+ this.agentGroupList = result;
+ const total1 = splitTotalList1['0']?.[0] || {};
+ const total2 = splitTotalList2['0']?.[0] || {};
+ this.agentGroupListColumns = [
+ {
+ title: '地接社名称',
+ dataIndex: 'VendorName',
+ fixed: 'left',
+ children: [{
+ // title: this.startDate.format(config.DATE_FORMAT) + '~' + this.endDate.format(config.DATE_FORMAT),
+ dataIndex: 'VendorName',
+ fixed: 'left',
+ render: (text, record) => {record.VendorName}
+ }
+ ]
+ },
+ {
+ title: '团数',
+ dataIndex: 'GroupCount',
+ sorter: (a, b) => a.GroupCount - b.GroupCount,
+ children: [{
+ title: show_vs_tag(formatPercent((total1.GroupCount-total2.GroupCount)/total2.GroupCount),total1.GroupCount-total2.GroupCount,total1.GroupCount,total2.GroupCount),
+ titleX: [total1.GroupCount, total2.GroupCount].join(' vs '),
+ dataIndex: 'GroupCount'
+ }
+ ]
+ },
+ {
+ title: '人数',
+ dataIndex: 'PersonNum',
+ sorter: (a, b) => a.PersonNum - b.PersonNum,
+ children: [{
+ title: show_vs_tag(formatPercent((total1.PersonNum-total2.PersonNum)/total2.PersonNum),total1.PersonNum-total2.PersonNum,total1.PersonNum,total2.PersonNum),
+ titleX: [total1.PersonNum, total2.PersonNum].join(' vs '),
+ dataIndex: 'PersonNum'
+ }
+ ]
+ },
+ {
+ title: '团天数',
+ dataIndex: 'GroupDays',
+ sorter: (a, b) => a.GroupDays - b.GroupDays,
+ children: [{
+ title: show_vs_tag(formatPercent((total1.GroupDays-total2.GroupDays)/total2.GroupDays),total1.GroupDays-total2.GroupDays,total1.GroupDays,total2.GroupDays),
+ titleX: [total1.GroupDays, total2.GroupDays].join(' vs '),
+ dataIndex: 'GroupDays'
+ }
+ ]
+ },
+ {
+ title: '交易额',
+ dataIndex: 'totalcost',
+ sorter: (a, b) => a.totalcost - b.totalcost,
+ children: [{
+ title: show_vs_tag(formatPercent((total1.totalcost-total2.totalcost)/total2.totalcost),(total1.totalcost-total2.totalcost).toFixed(2),total1.totalcost,total2.totalcost),
+ titleX: [total1.totalcost, total2.totalcost].join(' vs '),
+ dataIndex: 'totalcost'
+ }
+ ]
+ },
+ {
+ title: '前勤分',
+ dataIndex: 'qianqin',
+ sorter: (a, b) => a.qianqin - b.qianqin,
+ children: [{
+ title: show_vs_tag(formatPercent((total1.qianqin-total2.qianqin)/total2.qianqin),(total1.qianqin-total2.qianqin).toFixed(2),total1.qianqin,total2.qianqin),
+ titleX: [total1.qianqin, total2.qianqin].join(' vs '),
+ dataIndex: 'qianqin'
+ }
+ ]
+ },
+ {
+ title: '好评数',
+ dataIndex: 'GoodCount',
+ sorter: (a, b) => a.GoodCount - b.GoodCount,
+ children: [{
+ title: show_vs_tag(formatPercent((total1.GoodCount-total2.GoodCount)/total2.GoodCount),total1.GoodCount-total2.GoodCount,total1.GoodCount,total2.GoodCount),
+ titleX: [total1.GoodCount, total2.GoodCount].join(' vs '),
+ dataIndex: 'GoodCount'
+ }
+ ]
+ },
+ {
+ title: '好评率',
+ dataIndex: 'GoodRate',
+ sorter: (a, b) => parseInt(a.GoodRate) - parseInt(b.GoodRate),
+ children: [{
+ title: show_vs_tag(formatPercent((percentToDecimal(total1.GoodRate)-percentToDecimal(total2.GoodRate))/percentToDecimal(total2.GoodRate)),
+ formatPercent(percentToDecimal(total1.GoodRate)-percentToDecimal(total2.GoodRate)),total1.GoodRate,total2.GoodRate),
+ titleX: [total1.GoodRate, total2.GoodRate].join(' vs '),
+ dataIndex: 'GoodRate'
+ }
+ ]
+ },
+ {
+ title: '差评数',
+ dataIndex: 'BadCount',
+ sorter: (a, b) => a.BadCount - b.BadCount,
+ children: [{
+ title: show_vs_tag(formatPercent((total1.BadCount-total2.BadCount)/total2.BadCount),total1.BadCount-total2.BadCount,total1.BadCount,total2.BadCount),
+ titleX: [total1.BadCount, total2.BadCount].join(' vs '),
+ dataIndex: 'BadCount'
+ }
+ ]
+ },
+ {
+ title: '差评率',
+ dataIndex: 'BadRate',
+ sorter: (a, b) => parseInt(a.BadRate) - parseInt(b.BadRate),
+ children: [{
+ title: show_vs_tag(formatPercent((percentToDecimal(total1.BadRate)-percentToDecimal(total2.BadRate))/percentToDecimal(total2.GoodRate)),
+ formatPercent(percentToDecimal(total1.BadRate)-percentToDecimal(total2.BadRate)),total1.BadRate,total2.BadRate),
+ titleX: [total1.BadRate, total2.BadRate].join(' vs '),
+ dataIndex: 'BadRate'
+ }
+ ]
+ }
+ ];
+ }
});
}
})
diff --git a/src/utils/commons.js b/src/utils/commons.js
index 2849681..86b4b7a 100644
--- a/src/utils/commons.js
+++ b/src/utils/commons.js
@@ -72,6 +72,10 @@ export function formatPercent(number) {
return Math.round(number * 100) + "%";
}
+export function percentToDecimal(number) {
+ return parseFloat(number) / 100;
+}
+
export function formatDate(date) {
if (isEmpty(date)) {
return "NaN";
diff --git a/src/views/AgentGroupCount.jsx b/src/views/AgentGroupCount.jsx
index 211243a..8d7dc5d 100644
--- a/src/views/AgentGroupCount.jsx
+++ b/src/views/AgentGroupCount.jsx
@@ -32,7 +32,7 @@ const AgentGroupCount = () => {
fieldProps: {
DepartmentList: { show_all: true, mode: 'multiple' },
WebCode: { show_all: false, mode: 'multiple' },
- dates: { hide_vs: true },
+ years: { hide_vs: true },
departureDateType: { disabledKeys: ['applyDate'] },
},
}}
diff --git a/src/views/OPDashboard.jsx b/src/views/OPDashboard.jsx
index 68a5eb5..6fedf58 100644
--- a/src/views/OPDashboard.jsx
+++ b/src/views/OPDashboard.jsx
@@ -33,7 +33,7 @@ export default observer((props) => {
const { formValues, formValuesToSub, siderBroken } = searchFormStore;
const _formValuesToSub = pick(formValuesToSub, ['DepartmentList', 'WebCode']);
- const { resetData, results } = SalesCRMDataStore;
+ const { searchValues, resetData, results } = SalesCRMDataStore;
const operatorObjects = results.details.map((v) => ({ key: v.groupsKey, value: v.groupsKey, label: v.groupsLabel, text: v.groupsLabel }));
// console.log(operatorObjects);
@@ -189,6 +189,7 @@ export default observer((props) => {
const dashboardTableProps = {
pagination: false,
size: 'small',
+ showSorterTooltip: false,
columns: [
{
title: '',
@@ -200,12 +201,12 @@ export default observer((props) => {
onFilter: (value, record) => record.groupsKey === value || record.groupType === 'overview',
},
{
- title: '前90 -30天',
+ title: () => (<>前90 -30天
{searchValues.date90.Date1} 至 {searchValues.date90.Date2}>),
key: 'date',
children: dataFields('result90', 0),
},
{
- title: '前180 -50天',
+ title: () => (<>前180 -50天
{searchValues.date180.Date1} 至 {searchValues.date180.Date2}>),
key: 'department',
children: dataFields('result180', 1),
},