|
|
@ -1,425 +1,442 @@
|
|
|
|
import { makeAutoObservable, runInAction } from "mobx";
|
|
|
|
import { makeAutoObservable, runInAction } from 'mobx';
|
|
|
|
import moment from "moment";
|
|
|
|
import moment from 'moment';
|
|
|
|
import * as config from "../config";
|
|
|
|
import * as config from '../config';
|
|
|
|
import * as comm from "../utils/commons";
|
|
|
|
import * as comm from '../utils/commons';
|
|
|
|
import { NavLink } from "react-router-dom";
|
|
|
|
import { NavLink } from 'react-router-dom';
|
|
|
|
import { groupsMappedByCode } from './../libs/ht';
|
|
|
|
import { groupsMappedByCode } from './../libs/ht';
|
|
|
|
|
|
|
|
|
|
|
|
// 销售数据
|
|
|
|
// 销售数据
|
|
|
|
class SaleStore {
|
|
|
|
class SaleStore {
|
|
|
|
constructor(rootStore) {
|
|
|
|
constructor(rootStore) {
|
|
|
|
this.rootStore = rootStore;
|
|
|
|
this.rootStore = rootStore;
|
|
|
|
makeAutoObservable(this);
|
|
|
|
makeAutoObservable(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
loading = false;
|
|
|
|
loading = false;
|
|
|
|
loading_table = false;
|
|
|
|
loading_table = false;
|
|
|
|
spinning = false; // 加载状态
|
|
|
|
spinning = false; // 加载状态
|
|
|
|
active_tab_key = "All"; // 当前选择的标签
|
|
|
|
active_tab_key = 'All'; // 当前选择的标签
|
|
|
|
group_select_mode = false;
|
|
|
|
group_select_mode = false;
|
|
|
|
groups = [groupsMappedByCode.GH.key]; // 默认GH事业部
|
|
|
|
groups = [groupsMappedByCode.GH.key]; // 默认GH事业部
|
|
|
|
filter_country=[];// 筛选国籍
|
|
|
|
filter_country = []; // 筛选国籍
|
|
|
|
filter_guest_type=[];// 筛选客户关系
|
|
|
|
filter_guest_type = []; // 筛选客户关系
|
|
|
|
site_select_mode = false; // 是否多选站点
|
|
|
|
site_select_mode = false; // 是否多选站点
|
|
|
|
include_tickets = "1"; // 是否包含门票,1是含有,0不含
|
|
|
|
include_tickets = '1'; // 是否包含门票,1是含有,0不含
|
|
|
|
webcode = "ALL";
|
|
|
|
webcode = 'ALL';
|
|
|
|
date_type = "ConfirmDate";
|
|
|
|
date_type = 'ConfirmDate';
|
|
|
|
ml_data = []; // 毛利数据
|
|
|
|
ml_data = []; // 毛利数据
|
|
|
|
type_data = []; // 类型的数据
|
|
|
|
type_data = []; // 类型的数据
|
|
|
|
type_data_sub = []; // 类型的子维度数据
|
|
|
|
type_data_sub = []; // 类型的子维度数据
|
|
|
|
date_title = "date_title"; // 日期段,只用于显示,防止日期选择控件的变化导致页面刷新
|
|
|
|
date_title = 'date_title'; // 日期段,只用于显示,防止日期选择控件的变化导致页面刷新
|
|
|
|
|
|
|
|
|
|
|
|
// 是否包含门票
|
|
|
|
// 是否包含门票
|
|
|
|
handleChange_include_tickets = value => {
|
|
|
|
handleChange_include_tickets = (value) => {
|
|
|
|
this.include_tickets = value;
|
|
|
|
this.include_tickets = value;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 选择事业部
|
|
|
|
// 选择事业部
|
|
|
|
group_handleChange(value) {
|
|
|
|
group_handleChange(value) {
|
|
|
|
this.groups = value;
|
|
|
|
this.groups = value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 选择站点
|
|
|
|
// 选择站点
|
|
|
|
handleChange_webcode = value => {
|
|
|
|
handleChange_webcode = (value) => {
|
|
|
|
this.webcode = value;
|
|
|
|
this.webcode = value;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 切换标签页
|
|
|
|
// 切换标签页
|
|
|
|
onChange_Tabs(active_key) {
|
|
|
|
onChange_Tabs(active_key) {
|
|
|
|
this.active_tab_key = active_key;
|
|
|
|
this.active_tab_key = active_key;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 下单日期或者出发日期
|
|
|
|
// 下单日期或者出发日期
|
|
|
|
onChange_datetype(value) {
|
|
|
|
onChange_datetype(value) {
|
|
|
|
this.date_type = value;
|
|
|
|
this.date_type = value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 选择客源国
|
|
|
|
// 选择客源国
|
|
|
|
onChange_Country(value) {
|
|
|
|
onChange_Country(value) {
|
|
|
|
this.filter_country = value;
|
|
|
|
this.filter_country = value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 选择成员关系
|
|
|
|
// 选择成员关系
|
|
|
|
onChange_GuestGroupType(value) {
|
|
|
|
onChange_GuestGroupType(value) {
|
|
|
|
this.filter_guest_type = value;
|
|
|
|
this.filter_guest_type = value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取业绩信息
|
|
|
|
// 获取业绩信息
|
|
|
|
get_department_order_ml(date_moment) {
|
|
|
|
get_department_order_ml(date_moment) {
|
|
|
|
let result = [];
|
|
|
|
let result = [];
|
|
|
|
const date1_start = date_moment.start_date.format(config.DATE_FORMAT);
|
|
|
|
const date1_start = date_moment.start_date.format(config.DATE_FORMAT);
|
|
|
|
const date1_end = date_moment.end_date.format(config.DATE_FORMAT);
|
|
|
|
const date1_end = date_moment.end_date.format(config.DATE_FORMAT);
|
|
|
|
const date2_start = comm.empty(date_moment.start_date_cp) ? "" : date_moment.start_date_cp.format(config.DATE_FORMAT);
|
|
|
|
const date2_start = comm.empty(date_moment.start_date_cp) ? '' : date_moment.start_date_cp.format(config.DATE_FORMAT);
|
|
|
|
const date2_end = comm.empty(date_moment.end_date_cp) ? "" : date_moment.end_date_cp.format(config.DATE_FORMAT);
|
|
|
|
const date2_end = comm.empty(date_moment.end_date_cp) ? '' : date_moment.end_date_cp.format(config.DATE_FORMAT);
|
|
|
|
this.loading = true;
|
|
|
|
this.loading = true;
|
|
|
|
this.date_title = `${date1_start}~${date1_end}`;
|
|
|
|
this.date_title = `${date1_start}~${date1_end}`;
|
|
|
|
let url = "/service-web/QueryData/GetDepartmentOrderML";
|
|
|
|
let url = '/service-web/QueryData/GetDepartmentOrderML';
|
|
|
|
url += `?DepartmentList=${this.groups.toString()}&DateType=${this.date_type}&WebCode=${this.webcode}&IncludeTickets=${this.include_tickets}`;
|
|
|
|
url += `?DepartmentList=${this.groups.toString()}&DateType=${this.date_type}&WebCode=${this.webcode}&IncludeTickets=${this.include_tickets}`;
|
|
|
|
url += `&Date1=${date1_start}&Date2=${date1_end}%2023:59:59`;
|
|
|
|
url += `&Date1=${date1_start}&Date2=${date1_end}%2023:59:59`;
|
|
|
|
if (date2_start && date2_end) {
|
|
|
|
if (date2_start && date2_end) {
|
|
|
|
url += `&OldDate1=${date2_start}&OldDate2=${date2_end}%2023:59:59`;
|
|
|
|
url += `&OldDate1=${date2_start}&OldDate2=${date2_end}%2023:59:59`;
|
|
|
|
this.date_title += ` ${date2_start}~${date2_end}`;
|
|
|
|
this.date_title += ` ${date2_start}~${date2_end}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fetch(config.HT_HOST + url)
|
|
|
|
fetch(config.HT_HOST + url)
|
|
|
|
.then(response => response.json())
|
|
|
|
.then((response) => response.json())
|
|
|
|
.then(json => {
|
|
|
|
.then((json) => {
|
|
|
|
result = json.result1;
|
|
|
|
result = json.result1;
|
|
|
|
// if (!comm.empty(json.result2) && !comm.empty(date_moment.start_date_cp)) {
|
|
|
|
// if (!comm.empty(json.result2) && !comm.empty(date_moment.start_date_cp)) {
|
|
|
|
// let diff_days = date_moment.start_date.diff(date_moment.start_date_cp, "days");
|
|
|
|
// let diff_days = date_moment.start_date.diff(date_moment.start_date_cp, "days");
|
|
|
|
// for (let item of json.result2) {
|
|
|
|
// for (let item of json.result2) {
|
|
|
|
// result.push({
|
|
|
|
// result.push({
|
|
|
|
// COLI_Date: moment(item.COLI_Date).add(diff_days, "days").format(config.DATE_FORMAT),
|
|
|
|
// COLI_Date: moment(item.COLI_Date).add(diff_days, "days").format(config.DATE_FORMAT),
|
|
|
|
// COLI_YJLY: item.COLI_YJLY,
|
|
|
|
// COLI_YJLY: item.COLI_YJLY,
|
|
|
|
// groups: item.groups,
|
|
|
|
// groups: item.groups,
|
|
|
|
// key: item.key,
|
|
|
|
// key: item.key,
|
|
|
|
// });
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
runInAction(() => {
|
|
|
|
runInAction(() => {
|
|
|
|
this.ml_data = result;
|
|
|
|
this.ml_data = result;
|
|
|
|
this.loading = false;
|
|
|
|
this.loading = false;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.catch(error => {
|
|
|
|
.catch((error) => {
|
|
|
|
this.loading = false;
|
|
|
|
this.loading = false;
|
|
|
|
console.log("fetch data failed", error);
|
|
|
|
console.log('fetch data failed', error);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 按类型获取业绩
|
|
|
|
// 按类型获取业绩
|
|
|
|
get_department_order_ml_by_type(date_moment) {
|
|
|
|
get_department_order_ml_by_type(date_moment) {
|
|
|
|
const result = { dataSource: [], columns: [] };
|
|
|
|
const result = { dataSource: [], columns: [] };
|
|
|
|
const date1_start = date_moment.start_date.format(config.DATE_FORMAT);
|
|
|
|
const date1_start = date_moment.start_date.format(config.DATE_FORMAT);
|
|
|
|
const date1_end = date_moment.end_date.format(config.DATE_FORMAT);
|
|
|
|
const date1_end = date_moment.end_date.format(config.DATE_FORMAT);
|
|
|
|
const date2_start = comm.empty(date_moment.start_date_cp) ? "" : date_moment.start_date_cp.format(config.DATE_FORMAT);
|
|
|
|
const date2_start = comm.empty(date_moment.start_date_cp) ? '' : date_moment.start_date_cp.format(config.DATE_FORMAT);
|
|
|
|
const date2_end = comm.empty(date_moment.end_date_cp) ? "" : date_moment.end_date_cp.format(config.DATE_FORMAT);
|
|
|
|
const date2_end = comm.empty(date_moment.end_date_cp) ? '' : date_moment.end_date_cp.format(config.DATE_FORMAT);
|
|
|
|
this.loading_table = true;
|
|
|
|
this.loading_table = true;
|
|
|
|
this.date_title = `${date1_start}~${date1_end}`;
|
|
|
|
this.date_title = `${date1_start}~${date1_end}`;
|
|
|
|
let url = "/service-web/QueryData/GetDepartmentOrderMLByType";
|
|
|
|
let url = '/service-web/QueryData/GetDepartmentOrderMLByType';
|
|
|
|
url += `?DepartmentList=${this.groups.toString()}&DateType=${this.date_type}&OrderType=${this.active_tab_key}&WebCode=${this.webcode}&IncludeTickets=${this.include_tickets}`;
|
|
|
|
url += `?DepartmentList=${this.groups.toString()}&DateType=${this.date_type}&OrderType=${this.active_tab_key}&WebCode=${this.webcode}&IncludeTickets=${this.include_tickets}`;
|
|
|
|
url += `&Date1=${date1_start}&Date2=${date1_end}%2023:59:59`;
|
|
|
|
url += `&Date1=${date1_start}&Date2=${date1_end}%2023:59:59`;
|
|
|
|
if (date2_start && date2_end) {
|
|
|
|
if (date2_start && date2_end) {
|
|
|
|
url += `&OldDate1=${date2_start}&OldDate2=${date2_end}%2023:59:59`;
|
|
|
|
url += `&OldDate1=${date2_start}&OldDate2=${date2_end}%2023:59:59`;
|
|
|
|
this.date_title += ` ${date2_start}~${date2_end}`;
|
|
|
|
this.date_title += ` ${date2_start}~${date2_end}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fetch(config.HT_HOST + url)
|
|
|
|
fetch(config.HT_HOST + url)
|
|
|
|
.then(response => response.json())
|
|
|
|
.then((response) => response.json())
|
|
|
|
.then(json => {
|
|
|
|
.then((json) => {
|
|
|
|
if (!comm.empty(json.result2) && !comm.empty(date_moment.start_date_cp)) {
|
|
|
|
if (!comm.empty(json.result2) && !comm.empty(date_moment.start_date_cp)) {
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
if (this.active_tab_key === "All") {
|
|
|
|
if (this.active_tab_key === 'All') {
|
|
|
|
result.columns = [
|
|
|
|
result.columns = [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "",
|
|
|
|
title: '',
|
|
|
|
children: [
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "",
|
|
|
|
title: '',
|
|
|
|
dataIndex: "OPI_Name",
|
|
|
|
dataIndex: 'OPI_Name',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "毛利",
|
|
|
|
title: '毛利',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + comm.price_to_number(b.COLI_ML), 0), dataIndex: "COLI_ML" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + comm.price_to_number(b.COLI_ML), 0), dataIndex: 'COLI_ML' }],
|
|
|
|
sorter: (a, b) => comm.price_to_number(b.COLI_ML) - comm.price_to_number(a.COLI_ML),
|
|
|
|
sorter: (a, b) => comm.price_to_number(b.COLI_ML) - comm.price_to_number(a.COLI_ML),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "成行率",
|
|
|
|
title: '成行率',
|
|
|
|
children: [{ title: comm.formatPercent(json.result1.reduce((a, b) => a + b.COLI_CJCount, 0) / json.result1.reduce((a, b) => a + b.COLI_OrderCount, 0)), dataIndex: "COLI_CJrate" }],
|
|
|
|
children: [{ title: comm.formatPercent(json.result1.reduce((a, b) => a + b.COLI_CJCount, 0) / json.result1.reduce((a, b) => a + b.COLI_OrderCount, 0)), dataIndex: 'COLI_CJrate' }],
|
|
|
|
sorter: (a, b) => parseInt(b.COLI_CJrate) - parseInt(a.COLI_CJrate),
|
|
|
|
sorter: (a, b) => parseInt(b.COLI_CJrate) - parseInt(a.COLI_CJrate),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "成团数",
|
|
|
|
title: '成团数',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.COLI_CJCount, 0), dataIndex: "COLI_CJCount" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.COLI_CJCount, 0), dataIndex: 'COLI_CJCount' }],
|
|
|
|
sorter: (a, b) => b.COLI_CJCount - a.COLI_CJCount,
|
|
|
|
sorter: (a, b) => b.COLI_CJCount - a.COLI_CJCount,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "订单数",
|
|
|
|
title: '订单数',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.COLI_OrderCount, 0), dataIndex: "COLI_OrderCount" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.COLI_OrderCount, 0), dataIndex: 'COLI_OrderCount' }],
|
|
|
|
sorter: (a, b) => b.COLI_OrderCount - a.COLI_OrderCount,
|
|
|
|
sorter: (a, b) => b.COLI_OrderCount - a.COLI_OrderCount,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "单团毛利",
|
|
|
|
title: '单团毛利',
|
|
|
|
children: [{ title: "", dataIndex: "COLI_SingleML" }],
|
|
|
|
children: [{ title: '', dataIndex: 'COLI_SingleML' }],
|
|
|
|
sorter: (a, b) => comm.price_to_number(b.COLI_SingleML) - comm.price_to_number(a.COLI_SingleML),
|
|
|
|
sorter: (a, b) => comm.price_to_number(b.COLI_SingleML) - comm.price_to_number(a.COLI_SingleML),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "成团周期",
|
|
|
|
title: '成团周期',
|
|
|
|
children: [{ title: "", dataIndex: "COLI_Cycle" }],
|
|
|
|
children: [{ title: '', dataIndex: 'COLI_Cycle' }],
|
|
|
|
sorter: (a, b) => b.COLI_Cycle - a.COLI_Cycle,
|
|
|
|
sorter: (a, b) => b.COLI_Cycle - a.COLI_Cycle,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
];
|
|
|
|
];
|
|
|
|
result.dataSource = json.result1;
|
|
|
|
result.dataSource = json.result1;
|
|
|
|
} else if (this.active_tab_key === "ResponseRateByWL") {
|
|
|
|
} else if (this.active_tab_key === 'ResponseRateByWL') {
|
|
|
|
result.columns = [
|
|
|
|
result.columns = [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "",
|
|
|
|
title: '',
|
|
|
|
children: [
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "",
|
|
|
|
title: '',
|
|
|
|
dataIndex: "OPI_Name",
|
|
|
|
dataIndex: 'OPI_Name',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "报价次数",
|
|
|
|
title: '报价次数',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.PriceTime, 0), dataIndex: "PriceTime" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.PriceTime, 0), dataIndex: 'PriceTime' }],
|
|
|
|
sorter: (a, b) => b.PriceTime - a.PriceTime,
|
|
|
|
sorter: (a, b) => b.PriceTime - a.PriceTime,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "邮件发送次数",
|
|
|
|
title: '邮件发送次数',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.mailSendTime, 0), dataIndex: "mailSendTime" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.mailSendTime, 0), dataIndex: 'mailSendTime' }],
|
|
|
|
sorter: (a, b) => b.mailSendTime - a.mailSendTime,
|
|
|
|
sorter: (a, b) => b.mailSendTime - a.mailSendTime,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "WhatsApp客人会话次数",
|
|
|
|
title: 'WhatsApp客人会话次数',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WhatsAppGuestChatCount, 0), dataIndex: "WhatsAppGuestChatCount" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WhatsAppGuestChatCount, 0), dataIndex: 'WhatsAppGuestChatCount' }],
|
|
|
|
sorter: (a, b) => b.WhatsAppGuestChatCount - a.WhatsAppGuestChatCount,
|
|
|
|
sorter: (a, b) => b.WhatsAppGuestChatCount - a.WhatsAppGuestChatCount,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "WhatsApp外联会话次数",
|
|
|
|
title: 'WhatsApp外联会话次数',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WhatsAppWLChatCount, 0), dataIndex: "WhatsAppWLChatCount" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WhatsAppWLChatCount, 0), dataIndex: 'WhatsAppWLChatCount' }],
|
|
|
|
sorter: (a, b) => b.WhatsAppWLChatCount - a.WhatsAppWLChatCount,
|
|
|
|
sorter: (a, b) => b.WhatsAppWLChatCount - a.WhatsAppWLChatCount,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "WhatsApp新增客户数",
|
|
|
|
title: 'WhatsApp新增客户数',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WhatsAppNewGuestCount, 0), dataIndex: "WhatsAppNewGuestCount" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WhatsAppNewGuestCount, 0), dataIndex: 'WhatsAppNewGuestCount' }],
|
|
|
|
sorter: (a, b) => b.WhatsAppNewGuestCount - a.WhatsAppNewGuestCount,
|
|
|
|
sorter: (a, b) => b.WhatsAppNewGuestCount - a.WhatsAppNewGuestCount,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "微信客人会话次数",
|
|
|
|
title: '微信客人会话次数',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WXGuestChatCount, 0), dataIndex: "WXGuestChatCount" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WXGuestChatCount, 0), dataIndex: 'WXGuestChatCount' }],
|
|
|
|
sorter: (a, b) => b.WXGuestChatCount - a.WXGuestChatCount,
|
|
|
|
sorter: (a, b) => b.WXGuestChatCount - a.WXGuestChatCount,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "微信外联会话次数",
|
|
|
|
title: '微信外联会话次数',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WXWLChatCount, 0), dataIndex: "WXWLChatCount" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WXWLChatCount, 0), dataIndex: 'WXWLChatCount' }],
|
|
|
|
sorter: (a, b) => b.WXWLChatCount - a.WXWLChatCount,
|
|
|
|
sorter: (a, b) => b.WXWLChatCount - a.WXWLChatCount,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "微信新增客户数",
|
|
|
|
title: '微信新增客户数',
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WXNewGuestCount, 0), dataIndex: "WXNewGuestCount" }],
|
|
|
|
children: [{ title: json.result1.reduce((a, b) => a + b.WXNewGuestCount, 0), dataIndex: 'WXNewGuestCount' }],
|
|
|
|
sorter: (a, b) => b.WXNewGuestCount - a.WXNewGuestCount,
|
|
|
|
sorter: (a, b) => b.WXNewGuestCount - a.WXNewGuestCount,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
];
|
|
|
|
];
|
|
|
|
result.dataSource = json.result1;
|
|
|
|
result.dataSource = json.result1;
|
|
|
|
} else if (this.active_tab_key === "ResponseRateWhatsApp") {
|
|
|
|
} else if (this.active_tab_key === 'ResponseRateWhatsApp') {
|
|
|
|
result.columns = [
|
|
|
|
result.columns = [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "",
|
|
|
|
title: '',
|
|
|
|
children: [
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "",
|
|
|
|
title: '',
|
|
|
|
dataIndex: "OPI_Name",
|
|
|
|
dataIndex: 'OPI_Name',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "首次回复率",
|
|
|
|
title: '首次回复率',
|
|
|
|
children: [{ title: "", dataIndex: "firstReplayRate", render: (text, record) => <span title={record.firstReplay + "回复数/" + record.OrderCount + "总订单"}>{text}</span> }],
|
|
|
|
children: [{ title: '', dataIndex: 'firstReplayRate', render: (text, record) => <span title={record.firstReplay + '回复数/' + record.OrderCount + '总订单'}>{text}</span> }],
|
|
|
|
sorter: (a, b) => parseInt(b.firstReplayRate) - parseInt(a.firstReplayRate),
|
|
|
|
sorter: (a, b) => parseInt(b.firstReplayRate) - parseInt(a.firstReplayRate),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "一次报价率",
|
|
|
|
title: '一次报价率',
|
|
|
|
children: [{ title: "", dataIndex: "FirstQuotationRate", render: (text, record) => <span title={record.FirstQuotation + "一次报价数/" + record.OrderCount + "总订单"}>{text}</span> }],
|
|
|
|
children: [{ title: '', dataIndex: 'FirstQuotationRate', render: (text, record) => <span title={record.FirstQuotation + '一次报价数/' + record.OrderCount + '总订单'}>{text}</span> }],
|
|
|
|
sorter: (a, b) => parseInt(b.FirstQuotationRate) - parseInt(a.FirstQuotationRate),
|
|
|
|
sorter: (a, b) => parseInt(b.FirstQuotationRate) - parseInt(a.FirstQuotationRate),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "一次报价回复率",
|
|
|
|
title: '一次报价回复率',
|
|
|
|
children: [{ title: "", dataIndex: "FirstQuotationReplayRate", render: (text, record) => <span title={record.FirstQuotationReplay + "一次报价回复数/" + record.FirstQuotation + "一次报价数"}>{text}</span> }],
|
|
|
|
children: [
|
|
|
|
sorter: (a, b) => parseInt(b.FirstQuotationReplayRate) - parseInt(a.FirstQuotationReplayRate),
|
|
|
|
{
|
|
|
|
},
|
|
|
|
title: '',
|
|
|
|
{
|
|
|
|
dataIndex: 'FirstQuotationReplayRate',
|
|
|
|
title: "一次报价回复周期",
|
|
|
|
render: (text, record) => <span title={record.FirstQuotationReplay + '一次报价回复数/' + record.FirstQuotation + '一次报价数'}>{text}</span>,
|
|
|
|
children: [{ title: "", dataIndex: "FirstQuotationReplaytimeAVG" }],
|
|
|
|
},
|
|
|
|
sorter: (a, b) => b.FirstQuotationReplaytimeAVG - a.FirstQuotationReplaytimeAVG,
|
|
|
|
],
|
|
|
|
},
|
|
|
|
sorter: (a, b) => parseInt(b.FirstQuotationReplayRate) - parseInt(a.FirstQuotationReplayRate),
|
|
|
|
{
|
|
|
|
},
|
|
|
|
title: "二次报价率",
|
|
|
|
{
|
|
|
|
children: [{ title: "", dataIndex: "SecondQuotationRate", render: (text, record) => <span title={record.SecondQuotation + "二次报价数/" + record.FirstQuotationReplay + "一次报价回复数"}>{text}</span> }],
|
|
|
|
title: '一次报价回复周期',
|
|
|
|
sorter: (a, b) => parseInt(b.SecondQuotationRate) - parseInt(a.SecondQuotationRate),
|
|
|
|
children: [{ title: '', dataIndex: 'FirstQuotationReplaytimeAVG' }],
|
|
|
|
},
|
|
|
|
sorter: (a, b) => b.FirstQuotationReplaytimeAVG - a.FirstQuotationReplaytimeAVG,
|
|
|
|
{
|
|
|
|
},
|
|
|
|
title: "二次报价回复率",
|
|
|
|
{
|
|
|
|
children: [{ title: "", dataIndex: "SecondQuotationReplayRate", render: (text, record) => <span title={record.SecondQuotation + "二次报价数/" + record.SecondQuotationReplay + "二次报价回复"}>{text}</span> }],
|
|
|
|
title: '二次报价率',
|
|
|
|
sorter: (a, b) => parseInt(b.SecondQuotationReplayRate) - parseInt(a.SecondQuotationReplayRate),
|
|
|
|
children: [
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: '',
|
|
|
|
title: "二次报价回复周期",
|
|
|
|
dataIndex: 'SecondQuotationRate',
|
|
|
|
children: [{ title: "", dataIndex: "SecondQuotationReplaytimeAVG" }],
|
|
|
|
render: (text, record) => <span title={record.SecondQuotation + '二次报价数/' + record.FirstQuotationReplay + '一次报价回复数'}>{text}</span>,
|
|
|
|
sorter: (a, b) => b.SecondQuotationReplaytimeAVG - a.SecondQuotationReplaytimeAVG,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
{
|
|
|
|
sorter: (a, b) => parseInt(b.SecondQuotationRate) - parseInt(a.SecondQuotationRate),
|
|
|
|
title: "成团率",
|
|
|
|
},
|
|
|
|
children: [{ title: "", dataIndex: "COLI_SuccessRate" }],
|
|
|
|
{
|
|
|
|
sorter: (a, b) => parseInt(b.COLI_SuccessRate) - parseInt(a.COLI_SuccessRate),
|
|
|
|
title: '二次报价回复率',
|
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "成团周期",
|
|
|
|
title: '',
|
|
|
|
children: [{ title: "", dataIndex: "COLI_ConfirmTimeAVG" }],
|
|
|
|
dataIndex: 'SecondQuotationReplayRate',
|
|
|
|
sorter: (a, b) => b.COLI_ConfirmTimeAVG - a.COLI_ConfirmTimeAVG,
|
|
|
|
render: (text, record) => <span title={record.SecondQuotation + '二次报价数/' + record.SecondQuotationReplay + '二次报价回复'}>{text}</span>,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
];
|
|
|
|
],
|
|
|
|
result.dataSource = json.result1;
|
|
|
|
sorter: (a, b) => parseInt(b.SecondQuotationReplayRate) - parseInt(a.SecondQuotationReplayRate),
|
|
|
|
} else {
|
|
|
|
},
|
|
|
|
// if (this.active_tab_key == "Country")
|
|
|
|
{
|
|
|
|
// 获取类型的项目,去掉重复,作为列名
|
|
|
|
title: '二次报价回复周期',
|
|
|
|
const type_name_arr = [];
|
|
|
|
children: [{ title: '', dataIndex: 'SecondQuotationReplaytimeAVG' }],
|
|
|
|
json.result1.map(item => {
|
|
|
|
sorter: (a, b) => b.SecondQuotationReplaytimeAVG - a.SecondQuotationReplaytimeAVG,
|
|
|
|
type_name_arr[item.SubTypeSN] = { SubTypeSN: item.SubTypeSN, SubTypeName: item.SubTypeName };
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
title: '成团率',
|
|
|
|
|
|
|
|
children: [{ title: '', dataIndex: 'COLI_SuccessRate' }],
|
|
|
|
|
|
|
|
sorter: (a, b) => parseInt(b.COLI_SuccessRate) - parseInt(a.COLI_SuccessRate),
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
title: '成团周期',
|
|
|
|
|
|
|
|
children: [{ title: '', dataIndex: 'COLI_ConfirmTimeAVG' }],
|
|
|
|
|
|
|
|
sorter: (a, b) => b.COLI_ConfirmTimeAVG - a.COLI_ConfirmTimeAVG,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
result.dataSource = json.result1;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// if (this.active_tab_key == "Country")
|
|
|
|
|
|
|
|
// 获取类型的项目,去掉重复,作为列名
|
|
|
|
|
|
|
|
const type_name_arr = [];
|
|
|
|
|
|
|
|
json.result1.map((item) => {
|
|
|
|
|
|
|
|
type_name_arr[item.SubTypeSN] = { SubTypeSN: item.SubTypeSN, SubTypeName: item.SubTypeName };
|
|
|
|
return item;
|
|
|
|
return item;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const type_data = [];
|
|
|
|
const type_data = [];
|
|
|
|
const type_data_arr = [];
|
|
|
|
const type_data_arr = [];
|
|
|
|
|
|
|
|
|
|
|
|
for (const item of json.result1) {
|
|
|
|
for (const item of json.result1) {
|
|
|
|
const op_sn = "OP_" + item.OPI_SN; // 顾问的SN
|
|
|
|
const op_sn = 'OP_' + item.OPI_SN; // 顾问的SN
|
|
|
|
const items = json.result1.filter(d => String(d.OPI_SN) === String(item.OPI_SN)); // 筛选出有当前顾问的记录
|
|
|
|
const items = json.result1.filter((d) => String(d.OPI_SN) === String(item.OPI_SN)); // 筛选出有当前顾问的记录
|
|
|
|
const total_data_value = items.length ? items.reduce((a, b) => a + b.COLI_YJLY, 0) : ""; // 记录累加
|
|
|
|
const total_data_value = items.length ? items.reduce((a, b) => a + b.COLI_YJLY, 0) : ''; // 记录累加
|
|
|
|
if (comm.empty(type_data[op_sn])) {
|
|
|
|
if (comm.empty(type_data[op_sn])) {
|
|
|
|
type_data[op_sn] = [{ key: item.OPI_SN }, { T_name: item.OPI_Name }, { T_total: total_data_value }];
|
|
|
|
type_data[op_sn] = [{ key: item.OPI_SN }, { T_name: item.OPI_Name }, { T_total: total_data_value }];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
type_data[op_sn].push({ ["T_" + item.SubTypeSN]: item.COLI_YJLY });
|
|
|
|
type_data[op_sn].push({ ['T_' + item.SubTypeSN]: item.COLI_YJLY });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Object.values(type_data).map(item => {
|
|
|
|
Object.values(type_data).map((item) => {
|
|
|
|
type_data_arr.push(
|
|
|
|
type_data_arr.push(
|
|
|
|
Object.assign(
|
|
|
|
Object.assign(
|
|
|
|
...item.map(it => {
|
|
|
|
...item.map((it) => {
|
|
|
|
return it;
|
|
|
|
return it;
|
|
|
|
})
|
|
|
|
})
|
|
|
|
)
|
|
|
|
)
|
|
|
|
);
|
|
|
|
);
|
|
|
|
return item;
|
|
|
|
return item;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
result.columns.push(
|
|
|
|
result.columns.push(
|
|
|
|
{ title: "顾问", children: [{ title: "", dataIndex: "T_name", render: (text, record) => <NavLink to={`/sale_sub/${this.active_tab_key}`}>{text}</NavLink> }] },
|
|
|
|
{ title: '顾问', children: [{ title: '', dataIndex: 'T_name', render: (text, record) => <NavLink to={`/sale_sub/${this.active_tab_key}`}>{text}</NavLink> }] },
|
|
|
|
{ title: "合计", children: [{ title: type_data_arr.reduce((a, b) => a + b.T_total, 0), dataIndex: "T_total" }], sorter: (a, b) => b.T_total - a.T_total }
|
|
|
|
{ title: '合计', children: [{ title: type_data_arr.reduce((a, b) => a + b.T_total, 0), dataIndex: 'T_total' }], sorter: (a, b) => b.T_total - a.T_total }
|
|
|
|
);
|
|
|
|
);
|
|
|
|
Object.values(type_name_arr).map((item, index) => {
|
|
|
|
Object.values(type_name_arr).map((item, index) => {
|
|
|
|
const data_index = "T_" + item.SubTypeSN;
|
|
|
|
const data_index = 'T_' + item.SubTypeSN;
|
|
|
|
const items = type_data_arr.filter(d => d[data_index]); // 筛选出有对应类型的记录
|
|
|
|
const items = type_data_arr.filter((d) => d[data_index]); // 筛选出有对应类型的记录
|
|
|
|
const total_data_value = items.length ? items.reduce((a, b) => a + b[data_index], 0) : ""; // 记录累加
|
|
|
|
const total_data_value = items.length ? items.reduce((a, b) => a + b[data_index], 0) : ''; // 记录累加
|
|
|
|
result.columns.push({
|
|
|
|
result.columns.push({
|
|
|
|
title: item.SubTypeName,
|
|
|
|
title: item.SubTypeName,
|
|
|
|
children: [{ title: total_data_value, dataIndex: data_index }],
|
|
|
|
children: [{ title: total_data_value, dataIndex: data_index }],
|
|
|
|
sorter: (a, b) => b[data_index] - a[data_index],
|
|
|
|
sorter: (a, b) => b[data_index] - a[data_index],
|
|
|
|
});
|
|
|
|
});
|
|
|
|
return item;
|
|
|
|
return item;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
result.dataSource = type_data_arr;
|
|
|
|
result.dataSource = type_data_arr;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
runInAction(() => {
|
|
|
|
runInAction(() => {
|
|
|
|
this.type_data = result;
|
|
|
|
this.type_data = result;
|
|
|
|
this.loading_table = false;
|
|
|
|
this.loading_table = false;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.catch(error => {
|
|
|
|
.catch((error) => {
|
|
|
|
this.loading_table = false;
|
|
|
|
this.loading_table = false;
|
|
|
|
console.log("fetch data failed", error);
|
|
|
|
console.log('fetch data failed', error);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 子维度查询
|
|
|
|
// 子维度查询
|
|
|
|
get_department_order_ml_by_type_sub(date_moment, type_sub) {
|
|
|
|
get_department_order_ml_by_type_sub(date_moment, type_sub) {
|
|
|
|
this.spinning = true;
|
|
|
|
this.spinning = true;
|
|
|
|
const result = { dataSource: [], columns: [] };
|
|
|
|
const result = { dataSource: [], columns: [] };
|
|
|
|
const date1_start = date_moment.start_date.format(config.DATE_FORMAT);
|
|
|
|
const date1_start = date_moment.start_date.format(config.DATE_FORMAT);
|
|
|
|
const date1_end = date_moment.end_date.format(config.DATE_FORMAT);
|
|
|
|
const date1_end = date_moment.end_date.format(config.DATE_FORMAT);
|
|
|
|
const date2_start = comm.empty(date_moment.start_date_cp) ? "" : date_moment.start_date_cp.format(config.DATE_FORMAT);
|
|
|
|
const date2_start = comm.empty(date_moment.start_date_cp) ? '' : date_moment.start_date_cp.format(config.DATE_FORMAT);
|
|
|
|
const date2_end = comm.empty(date_moment.end_date_cp) ? "" : date_moment.end_date_cp.format(config.DATE_FORMAT);
|
|
|
|
const date2_end = comm.empty(date_moment.end_date_cp) ? '' : date_moment.end_date_cp.format(config.DATE_FORMAT);
|
|
|
|
let url = "/service-web/QueryData/GetDepartmentOrderMLByType_sub";
|
|
|
|
let url = '/service-web/QueryData/GetDepartmentOrderMLByType_sub';
|
|
|
|
url += `?DepartmentList=${this.groups.toString()}&DateType=${this.date_type}&subType=${type_sub}&subTypeVal=-1&WebCode=${this.webcode}&IncludeTickets=${this.include_tickets}`;
|
|
|
|
url += `?DepartmentList=${this.groups.toString()}&DateType=${this.date_type}&subType=${type_sub}&subTypeVal=-1&WebCode=${this.webcode}&IncludeTickets=${this.include_tickets}`;
|
|
|
|
url += `&Date1=${date1_start}&Date2=${date1_end}%2023:59:59`;
|
|
|
|
url += `&Date1=${date1_start}&Date2=${date1_end}%2023:59:59`;
|
|
|
|
if (date2_start && date2_end) {
|
|
|
|
if (date2_start && date2_end) {
|
|
|
|
url += `&OldDate1=${date2_start}&OldDate2=${date2_end}%2023:59:59`;
|
|
|
|
url += `&OldDate1=${date2_start}&OldDate2=${date2_end}%2023:59:59`;
|
|
|
|
this.date_title += ` ${date2_start}~${date2_end}`;
|
|
|
|
this.date_title += ` ${date2_start}~${date2_end}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fetch(config.HT_HOST + url)
|
|
|
|
fetch(config.HT_HOST + url)
|
|
|
|
.then(response => response.json())
|
|
|
|
.then((response) => response.json())
|
|
|
|
.then(json => {
|
|
|
|
.then((json) => {
|
|
|
|
if (!comm.empty(json.result2) && !comm.empty(date_moment.start_date_cp)) {
|
|
|
|
if (!comm.empty(json.result2) && !comm.empty(date_moment.start_date_cp)) {
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
result.columns = [
|
|
|
|
result.columns = [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "",
|
|
|
|
title: '',
|
|
|
|
dataIndex: "OPI_Name",
|
|
|
|
dataIndex: 'OPI_Name',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "毛利",
|
|
|
|
title: '毛利',
|
|
|
|
dataIndex: "COLI_ML",
|
|
|
|
dataIndex: 'COLI_ML',
|
|
|
|
sorter: (a, b) => b.COLI_ML - a.COLI_ML,
|
|
|
|
sorter: (a, b) => b.COLI_ML - a.COLI_ML,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "成行率",
|
|
|
|
title: '成行率',
|
|
|
|
dataIndex: "COLI_CJrate",
|
|
|
|
dataIndex: 'COLI_CJrate',
|
|
|
|
sorter: (a, b) => parseFloat(b.COLI_CJrate) - parseFloat(a.COLI_CJrate),
|
|
|
|
sorter: (a, b) => parseFloat(b.COLI_CJrate) - parseFloat(a.COLI_CJrate),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "成团数",
|
|
|
|
title: '成团数',
|
|
|
|
dataIndex: "COLI_CJCount",
|
|
|
|
dataIndex: 'COLI_CJCount',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "订单数",
|
|
|
|
title: '订单数',
|
|
|
|
dataIndex: "COLI_OrderCount",
|
|
|
|
dataIndex: 'COLI_OrderCount',
|
|
|
|
sorter: (a, b) => b.COLI_OrderCount - a.COLI_OrderCount,
|
|
|
|
sorter: (a, b) => b.COLI_OrderCount - a.COLI_OrderCount,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "单团毛利",
|
|
|
|
title: '单团毛利',
|
|
|
|
dataIndex: "COLI_SingleML",
|
|
|
|
dataIndex: 'COLI_SingleML',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: "成团周期",
|
|
|
|
title: '成团周期',
|
|
|
|
dataIndex: "COLI_Cycle",
|
|
|
|
dataIndex: 'COLI_Cycle',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
];
|
|
|
|
];
|
|
|
|
// 数据处理,把相同类型放入同一个数组
|
|
|
|
// 数据处理,把相同类型放入同一个数组
|
|
|
|
const type_data = [];
|
|
|
|
const type_data = [];
|
|
|
|
!comm.empty(json.result1) &&
|
|
|
|
!comm.empty(json.result1) &&
|
|
|
|
Object.values(json.result1).map(item => {
|
|
|
|
Object.values(json.result1).map((item) => {
|
|
|
|
const subtype_sn = "type_" + item.subType;
|
|
|
|
const subtype_sn = 'type_' + item.subType;
|
|
|
|
if (comm.empty(type_data[subtype_sn])) {
|
|
|
|
if (comm.empty(type_data[subtype_sn])) {
|
|
|
|
type_data[subtype_sn] = { subType: item.subType, subType_name: item.subTypeVal, data: [item] };
|
|
|
|
type_data[subtype_sn] = { subType: item.subType, subType_name: item.subTypeVal, data: [item] };
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
type_data[subtype_sn].data.push(item);
|
|
|
|
type_data[subtype_sn].data.push(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return item;
|
|
|
|
return item;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
result.dataSource = Object.values(type_data);
|
|
|
|
result.dataSource = Object.values(type_data);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
runInAction(() => {
|
|
|
|
|
|
|
|
this.type_data_sub = result;
|
|
|
|
|
|
|
|
this.spinning = false;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
.catch(error => {
|
|
|
|
|
|
|
|
this.spinning = false;
|
|
|
|
|
|
|
|
console.log("fetch data failed", error);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
runInAction(() => {
|
|
|
|
|
|
|
|
this.type_data_sub = result;
|
|
|
|
|
|
|
|
this.spinning = false;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
|
|
|
this.spinning = false;
|
|
|
|
|
|
|
|
console.log('fetch data failed', error);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export default SaleStore;
|
|
|
|
export default SaleStore;
|
|
|
|