import { makeAutoObservable, runInAction, toJS } from 'mobx'; import { fetchJSON } from '../utils/request'; import { isEmpty, sortDescBy, objectMapper, groupBy, pick, unique, cloneDeep } from '../utils/commons'; import { groupsMappedByCode, dataFieldAlias } from './../libs/ht'; import { DATE_FORMAT, SMALL_DATETIME_FORMAT } from './../config'; import moment from 'moment'; const fetchResultsData = async (param) => { const defaultParam = { WebCode: 'All', DepartmentList: '', opisn: -1, Date1: '', Date2: '', groupType: '', groupDateType: '', }; const json = await fetchJSON('/service-Analyse2/sales_crm_results', { ...defaultParam, ...param }); return json.errcode === 0 ? json.result : []; }; const fetchProcessData = async (param) => { const defaultParam = { WebCode: 'All', DepartmentList: '', opisn: -1, Date1: '', Date2: '', groupType: '', groupDateType: '', }; const json = await fetchJSON('/service-Analyse2/sales_crm_process', { ...defaultParam, ...param }); return json.errcode === 0 ? json.result : []; }; class SalesCRMData { constructor(appStore) { this.appStore = appStore; makeAutoObservable(this); } async get90n180Data(param = {}) { const retProps = param?.retLabel || ''; const retKey = param.groupDateType === '' ? (param.groupType === 'overview' ? 'dataSource' : 'details') : 'byDate'; this.results.loading = true; const date90=this.searchValues.date90; const date180=this.searchValues.date180; const [result90, result180] = await Promise.all([ fetchResultsData({ ...this.searchValuesToSub, ...date90, ...param }), fetchResultsData({ ...this.searchValuesToSub, ...date180, ...param }), ]); const _90O = groupBy(result90, 'groupsKey'); const _180O = groupBy(result180, 'groupsKey'); const result2 = unique(Object.keys(_90O).concat(Object.keys(_180O))).map((key) => { return { ...pick(_90O[key]?.[0] || _180O[key][0], ['groupsKey', 'groupsLabel', 'groupType']), ...(retProps && retKey === 'dataSource' ? { groupsLabel: retProps, retProps } : { retProps }), key: `${param.groupType}-${key}`, result90: _90O[key]?.[0] || {}, result180: _180O[key]?.[0] || {}, }; }); // console.log(result2, '+++++ +++', retKey); // console.log(this.results[retKey].length); runInAction(() => { this.results.loading = false; this.results[retKey] = [].concat(this.results[retKey], result2); }); return this.results; } async getResultData(param = {}) { const retKey = param.groupDateType === '' ? 'byOperator' : 'byDate'; this.results.loading = true; this.results[retKey] = []; const res = await fetchResultsData({ ...this.searchValuesToSub, ...param }); runInAction(() => { this.results.loading = false; this.results[retKey] = retKey === 'byOperator' ? res.filter(ele => ele.SumML > 0).sort(sortDescBy('SumML')) : res; }); return this.results; }; async getProcessData(param = {}) { // const retKey = param.groupDateType === '' ? 'byOperator' : 'byDate'; const retKey = param.groupDateType === '' ? (param.groupType !== 'operator' ? 'dataSource' : 'details') : 'byDate'; this.process.loading = true; this.process[retKey] = []; const res = await fetchProcessData({ ...this.searchValuesToSub, ...param }); runInAction(() => { this.process.loading = false; this.process[retKey] = [].concat(this.results[retKey], res); // this.process[retKey] =retKey === 'byOperator' ? res.filter(ele => ele.) }); } searchValues = { date: moment(), DateType: { key: 'applyDate', label: '提交日期'}, WebCode: { key: 'All', label: '所有来源' }, // IncludeTickets: { key: '1', label: '含门票'}, DepartmentList: [groupsMappedByCode.GH], operator: '-1', opisn: '-1', date90: { Date1: moment().subtract(90, 'days').format(DATE_FORMAT), Date2: moment().subtract(30, 'days').format(SMALL_DATETIME_FORMAT), }, date180: { Date1: moment().subtract(180, 'days').format(DATE_FORMAT), Date2: moment().subtract(50, 'days').format(SMALL_DATETIME_FORMAT), } }; searchValuesToSub = {}; setSearchValues(obj, values) { this.searchValues = { ...this.searchValues, ...values }; if (values.date) { this.searchValues.date90 = { Date1: (values.date.clone()).subtract(90, 'days').format(DATE_FORMAT), Date2: (values.date.clone()).subtract(30, 'days').format(SMALL_DATETIME_FORMAT), }; this.searchValues.date180 = { Date1: (values.date.clone()).subtract(180, 'days').format(DATE_FORMAT), Date2: (values.date.clone()).subtract(50, 'days').format(SMALL_DATETIME_FORMAT), }; } this.searchValuesToSub = obj; } results = { loading: false, dataSource: [], details: [], byDate: [], byOperator: [] }; process = { loading: false, dataSource: [], details: [], byDate: [], byOperator: [] }; resetData = () => { this.results.loading = false; for (const key of Object.keys(this.results)) { if (key !== 'loading') { this.results[key] = []; } } for (const key of Object.keys(this.process)) { if (key !== 'loading') { this.process[key] = []; } } }; } export default SalesCRMData;