|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
import { makeAutoObservable, runInAction, toJS } from 'mobx';
|
|
|
|
|
import * as req from '../utils/request';
|
|
|
|
|
import { isEmpty, sortBy } from '../utils/commons';
|
|
|
|
|
import { isEmpty, sortBy, pick } from '../utils/commons';
|
|
|
|
|
import { dataFieldAlias } from './../libs/ht';
|
|
|
|
|
|
|
|
|
|
class Trade {
|
|
|
|
|
constructor(rootStore) {
|
|
|
|
@ -8,76 +9,151 @@ class Trade {
|
|
|
|
|
makeAutoObservable(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 年度总额
|
|
|
|
|
*/
|
|
|
|
|
fetchSummaryData(queryData) {
|
|
|
|
|
this.summaryData.loading = true;
|
|
|
|
|
queryData.groupType = 'overview';
|
|
|
|
|
queryData.groupDateType = 'year';
|
|
|
|
|
req.fetchJSON('/service-Analyse2/GetTradeProcess/test', queryData).then((json) => {
|
|
|
|
|
// queryData.groupDateType = 'year';
|
|
|
|
|
this.fetchTradeData(queryData).then((json) => {
|
|
|
|
|
if (json.errcode === 0) {
|
|
|
|
|
runInAction(() => {
|
|
|
|
|
const summary = json.result1?.[0] || {};
|
|
|
|
|
const summaryData = {
|
|
|
|
|
loading: false,
|
|
|
|
|
dataSource: [
|
|
|
|
|
{ title: '成团', value: json.result1?.SumOrder, VSrate: json.result1?.SumOrderrate, KPIrate: json.result1?.SumOrderKPIrate, hasKPI: !isEmpty(json.result1?.SumOrderKPIrate) },
|
|
|
|
|
{ title: '毛利', value: json.result1?.SumML, VSrate: json.result1?.SumMLrate, KPIrate: json.result1?.SumMLKPIrate, hasKPI: !isEmpty(json.result1?.SumMLKPIrate) },
|
|
|
|
|
{ title: '完成率', value: `${json.result1?.SumMLKPIrate || ''}%`, hasKPI: false },
|
|
|
|
|
{
|
|
|
|
|
title: '成团',
|
|
|
|
|
value: summary?.ConfirmOrder,
|
|
|
|
|
// VSrate: summary?.ConfirmOrderrate,
|
|
|
|
|
KPIrate: summary?.[dataFieldAlias.ConfirmOrder.nestkey.p],
|
|
|
|
|
hasKPI: !isEmpty(summary?.[dataFieldAlias.ConfirmOrder.nestkey.p]),
|
|
|
|
|
},
|
|
|
|
|
{ title: '毛利', value: summary?.SumML, KPIrate: summary?.[dataFieldAlias.SumML.nestkey.p], hasKPI: !isEmpty(summary?.[dataFieldAlias.SumML.nestkey.p]) },
|
|
|
|
|
{ title: '完成率', value: `${summary?.[dataFieldAlias.SumML.nestkey.p] || ''}%`, hasKPI: false },
|
|
|
|
|
{
|
|
|
|
|
title: '人数',
|
|
|
|
|
value: json.result1?.SumPersonNum,
|
|
|
|
|
VSrate: json.result1?.SumPersonNumrate,
|
|
|
|
|
KPIrate: json.result1?.SumPersonNumKPIrate,
|
|
|
|
|
hasKPI: !isEmpty(json.result1?.SumPersonNumKPIrate),
|
|
|
|
|
value: summary?.SumPersonNum,
|
|
|
|
|
// VSrate: summary?.SumPersonNumrate,
|
|
|
|
|
// KPIrate: summary?.[dataFieldAlias.SumPersonNum.nestkey.p],
|
|
|
|
|
hasKPI: false, // // !isEmpty(summary?.[dataFieldAlias.SumPersonNum.nestkey.p]),
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
this.summaryData = summaryData;
|
|
|
|
|
const kpi = { label: '', value: summary.MLKPIvalue };
|
|
|
|
|
this.summaryData.kpi = kpi;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 时间轴
|
|
|
|
|
*/
|
|
|
|
|
fetchTradeDataByDate(queryData) {
|
|
|
|
|
this.timeData.loading = true;
|
|
|
|
|
Object.assign(queryData, { groupType: 'overview', groupDateType: 'month' });
|
|
|
|
|
this.fetchTradeData(queryData).then((json) => {
|
|
|
|
|
if (json.errcode === 0) {
|
|
|
|
|
runInAction(() => {
|
|
|
|
|
const data = json.result1;
|
|
|
|
|
// 标注KPI
|
|
|
|
|
|
|
|
|
|
this.timeData.loading = false;
|
|
|
|
|
this.timeData.dataSource = data;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 事业部年度
|
|
|
|
|
*/
|
|
|
|
|
fetchTradeDataByBU(queryData) {
|
|
|
|
|
this.BuData.loading = true;
|
|
|
|
|
Object.assign(queryData, { groupType: 'bu', groupDateType: 'year' });
|
|
|
|
|
this.fetchTradeData(queryData).then((json) => {
|
|
|
|
|
if (json.errcode === 0) {
|
|
|
|
|
runInAction(() => {
|
|
|
|
|
const data = json.result1;
|
|
|
|
|
// 标注KPI
|
|
|
|
|
|
|
|
|
|
this.BuData.loading = false;
|
|
|
|
|
this.BuData.dataSource = data;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 业务区域, 按月
|
|
|
|
|
*/
|
|
|
|
|
fetchTradeDataByMonth(queryData) {
|
|
|
|
|
this.sideData.loading = true;
|
|
|
|
|
// Object.assign(queryData, { groupType: 'bizarea', groupDateType: 'month' });
|
|
|
|
|
// todo: groupType: bizarea
|
|
|
|
|
Object.assign(queryData, { groupType: 'bu', groupDateType: 'month' });
|
|
|
|
|
req.fetchJSON('/service-Analyse2/GetTradeProcess/test', queryData).then((json) => {
|
|
|
|
|
this.fetchTradeData(queryData).then((json) => {
|
|
|
|
|
if (json.errcode === 0) {
|
|
|
|
|
runInAction(() => {
|
|
|
|
|
const sortResult = json.result1.sort(sortBy('groupDateVal'));
|
|
|
|
|
/**
|
|
|
|
|
* test: '91006'
|
|
|
|
|
*/
|
|
|
|
|
const groupsData = sortResult.reduce((r, v) => {
|
|
|
|
|
(r[v.groups] || (r[v.groups] = [])).push(v);
|
|
|
|
|
if (v.groupsLabel && ['91001', '91006'].includes(v.groupsKey)) { // , '91006'
|
|
|
|
|
(r[v.groupsLabel] || (r[v.groupsLabel] = [])).push(v);
|
|
|
|
|
}
|
|
|
|
|
return r;
|
|
|
|
|
}, {});
|
|
|
|
|
console.log(groupsData, 'groupsData', queryData);
|
|
|
|
|
const kpi = { label: '', value: 1200000 }; // todo: 标注KPI
|
|
|
|
|
this.sideData.loading = false;
|
|
|
|
|
this.sideData.dataSource = groupsData;
|
|
|
|
|
this.sideData.monthData = sortResult;
|
|
|
|
|
this.sideData.kpi = kpi;
|
|
|
|
|
// const kpi = { label: '', value: 1200000 }; // 标注KPI
|
|
|
|
|
// this.sideData.kpi = kpi;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* TOP
|
|
|
|
|
*/
|
|
|
|
|
fetchTradeDataByType(orderType, queryData) {
|
|
|
|
|
this.topData[orderType] = { loading: true, dataSource: [] };
|
|
|
|
|
Object.assign(queryData, { groupType: 'orderType', groupDateType: 'year' });
|
|
|
|
|
req.fetchJSON('/service-web/QueryData/GetTradeOrderByType', queryData).then((json) => {
|
|
|
|
|
this.topData[orderType] = { loading: true, dataSource: [], originData: [] };
|
|
|
|
|
Object.assign(queryData, { groupType: orderType, groupDateType: 'year' });
|
|
|
|
|
this.fetchTradeData(queryData).then((json) => {
|
|
|
|
|
if (json.errcode === 0) {
|
|
|
|
|
runInAction(() => {
|
|
|
|
|
this.topData[orderType].loading = false;
|
|
|
|
|
this.topData[orderType].dataSource = json.result1;
|
|
|
|
|
console.log({ loading: false, ...json }, orderType, 'topData');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取业绩数据
|
|
|
|
|
*/
|
|
|
|
|
async fetchTradeData(queryData) {
|
|
|
|
|
const json = await req.fetchJSON('/service-Analyse2/GetTradeProcess', queryData);
|
|
|
|
|
if (json.errcode === 0) {
|
|
|
|
|
return json;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setStateSearch(body) {
|
|
|
|
|
this.searchPayloadHome = body;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
summaryData = { loading: false, dataSource: [] };
|
|
|
|
|
sideData = { loading: false, dataSource: {}, kpi: {}, monthData: [] };
|
|
|
|
|
summaryData = { loading: false, dataSource: [], kpi: {}, };
|
|
|
|
|
timeData = { loading: false, dataSource: [] };
|
|
|
|
|
BuData = { loading: false, dataSource: [] };
|
|
|
|
|
sideData = { loading: false, dataSource: {}, monthData: [] };
|
|
|
|
|
dataForSort = {};
|
|
|
|
|
topData = {};
|
|
|
|
|
defaultDataSubject = 'CJCount';
|
|
|
|
|
searchPayloadHome = {};
|
|
|
|
|