|
@@ -1,21 +1,15 @@
|
|
|
import React from 'react';
|
|
|
-import { Select, Spin, Input, Table, Button ,message,DatePicker} from 'antd';
|
|
|
+import { Select, Spin, Input, Table, Button ,DatePicker, Form , Tabs , Switch,message} from 'antd';
|
|
|
import ajax from 'jquery/src/ajax/xhr.js';
|
|
|
import $ from 'jquery/src/ajax';
|
|
|
import './report.less';
|
|
|
+import DiurnalStatisticsOne from './timeStatisticsOne.jsx';
|
|
|
import { post } from '../../../dataDic.js';
|
|
|
+import moment from 'moment';
|
|
|
+const TabPane = Tabs.TabPane;
|
|
|
|
|
|
-const TimeStatistics = React.createClass({
|
|
|
- loadData(totalArr,pageNo) {
|
|
|
- if(this.state.selTime){
|
|
|
- var newTime=this.state.selTime;
|
|
|
- var timeArr=newTime.split('-');
|
|
|
- var txtTime=timeArr[0]+'年'+timeArr[1]+'月'+timeArr[2]+'日';
|
|
|
- this.setState({
|
|
|
- timeState:true,
|
|
|
- txtTime:txtTime,
|
|
|
- })
|
|
|
- }
|
|
|
+const DiurnalStatistics = React.createClass({
|
|
|
+ loadData(timeTypes,totalArr) {
|
|
|
let total=totalArr;
|
|
|
this.setState({
|
|
|
loading: true
|
|
@@ -24,79 +18,78 @@ const TimeStatistics = React.createClass({
|
|
|
method: "get",
|
|
|
dataType: "json",
|
|
|
crossDomain: false,
|
|
|
- url: globalConfig.context + "/api/admin/report/sales/personal",
|
|
|
+ url: globalConfig.context + "/api/admin/report/sales/marketingStatistics",
|
|
|
data: {
|
|
|
- pNo: pageNo || 1,
|
|
|
- pSize: 10,
|
|
|
- date:this.state.selTime?(this.state.selTime+' '+'00:00:00'):'',
|
|
|
- depName:this.state.departmentSearch,
|
|
|
- name:this.state.uesrNameSearch,
|
|
|
+ type:'1',
|
|
|
+ timeType:this.state.releaseDate[0]?4:timeTypes,
|
|
|
+ startDate: this.state.releaseDate[0]?(this.state.releaseDate[0]+' '+'00:00:00'):'',
|
|
|
+ endDate: this.state.releaseDate[1]?(this.state.releaseDate[1]+' '+'00:00:00'):'',
|
|
|
+ depId:this.state.superId,//部门机构
|
|
|
},
|
|
|
success: function(data) {
|
|
|
let thedata = data.data;
|
|
|
let theArr = [];
|
|
|
- if(!data.data) {
|
|
|
+ if(!thedata) {
|
|
|
if(data.error && data.error.length) {
|
|
|
message.warning(data.error[0].message);
|
|
|
};
|
|
|
thedata = {};
|
|
|
} else {
|
|
|
thedata.map(function(item, index) {
|
|
|
- var yTime=new Date(item.enrollTime).toLocaleDateString();
|
|
|
+ console.log(item);
|
|
|
let nub=index+1;
|
|
|
theArr.push({
|
|
|
key: index,
|
|
|
theNumber:false,
|
|
|
nub:nub,
|
|
|
id: item.id,
|
|
|
- name:item.name, //姓名
|
|
|
- departmentName:item.departmentName,//部门
|
|
|
- position:item.position, //职务
|
|
|
- enrollTime:yTime,// 入职时间
|
|
|
- dailyOrderCount:item.values.daily.orderCount,//日签单业绩
|
|
|
- dailyOrderAmount:item.values.daily.orderAmount,//日签单业绩
|
|
|
- weeklyOrderCount:item.values.weekly.orderCount,//周签单业绩
|
|
|
- weeklyOrderAmount:item.values.weekly.orderAmount,//周签单业绩
|
|
|
- monthlyOrderCount:item.values.monthly.orderCount,//月签单业绩
|
|
|
- monthlyOrderAmount:item.values.monthly.orderAmount,//月签单业绩
|
|
|
- quarterlyOrderCount:item.values.quarterly.orderCount,//季签单业绩
|
|
|
- quarterlyOrderAmount:item.values.quarterly.orderAmount,//季签单业绩
|
|
|
- annuallyOrderCount:item.values.annually.orderCount,//年签单业绩
|
|
|
- annuallyOrderAmount:item.values.annually.orderAmount,//年签单业绩
|
|
|
+ departmentId:item.departmentId,//部门ID
|
|
|
+ departmentName:item.departmentName,//部门名称
|
|
|
+ departmentManagerName:item.departmentManagerName,//部门负责人名称
|
|
|
+ departmentNumber:item.departmentNumber, //部门人数
|
|
|
+ privateCustomersCount:item.privateCustomersCount,// 部门客户数
|
|
|
+ dailyTelNo:item.dayTelNo,//日电话量
|
|
|
+ dailyVisitNo:item.dayVisitNo,//日外拜量
|
|
|
+ dailyFollowNo:item.dayFollowNo,//日营销总量
|
|
|
+ dailyAVG:parseFloat(item.dayAVG).toFixed(2),//日人均营销量
|
|
|
+ weekTelNo:item.weeklyTelNo,//周电话量
|
|
|
+ weekFollowNo:item.weeklyFollowNo,//周总量
|
|
|
+ weekVisitNo:item.weeklyVisitNo,//周外拜量
|
|
|
+ monthsTelNo:item.monthTelNo,//月电话量
|
|
|
+ monthsFollowNo:item.monthFollowNo,//月总量
|
|
|
+ monthsVisitNo:item.monshVisitNo,//月外拜量
|
|
|
+ annualTelNo:item.yearTelNo,//年电话量
|
|
|
+ annualFollowNo:item.yearFollowNo,//年总量
|
|
|
+ annualVisitNo:item.yearVisitNo,//年外拜量
|
|
|
})
|
|
|
})
|
|
|
- this.state.pagination.current =pageNo;
|
|
|
- this.state.pagination.total=total.totalRecordCount+Math.floor(total.totalRecordCount/10);
|
|
|
- };
|
|
|
- if(!data.data.length){
|
|
|
- this.state.pagination.total=0;
|
|
|
- };
|
|
|
+ }
|
|
|
if(theArr.length){
|
|
|
theArr.push(
|
|
|
- {
|
|
|
- key:9999999,
|
|
|
- theNumber:true,
|
|
|
- nub:data.data.length+1,
|
|
|
- name:'',
|
|
|
- position:'', //职务
|
|
|
- enrollTime:'',// 入职时间
|
|
|
- departmentName:'合计',
|
|
|
- dailyOrderCount:total.dailyTotalCount,//日签单业绩
|
|
|
- dailyOrderAmount:total.dailyTotalAmount,//日签单业绩
|
|
|
- weeklyOrderCount:total.weeklyTotalCount,//周签单业绩
|
|
|
- weeklyOrderAmount:total.weeklyTotalAmount,//周签单业绩
|
|
|
- monthlyOrderCount:total.monthlyTotalCount,//月签单业绩
|
|
|
- monthlyOrderAmount:total.monthlyTotalAmount,//月签单业绩
|
|
|
- quarterlyOrderCount:total.quarterlyTotalCount,//季签单业绩
|
|
|
- quarterlyOrderAmount:total.quarterlyTotalAmount,//季签单业绩
|
|
|
- annuallyOrderCount:total.annuallyTotalCount,//年签单业绩
|
|
|
- annuallyOrderAmount:total.annuallyTotalAmount,//年签单业绩
|
|
|
- }
|
|
|
- )
|
|
|
- }
|
|
|
+ {
|
|
|
+ key:9999999,
|
|
|
+ theNumber:true,
|
|
|
+ departmentName:'合计',
|
|
|
+ departmentNumber:total.departmentNumber, //部门人数
|
|
|
+ privateCustomersCount:total.privateCustomersCount,// 部门客户数
|
|
|
+ dailyTelNo:total.dayTelNo,//日电话量
|
|
|
+ dailyVisitNo:total.dayVisitNo,//日外拜量
|
|
|
+ dailyFollowNo:total.dayFollowNo,//日营销总量
|
|
|
+ dailyAVG:parseFloat(total.dailyAVG).toFixed(2),//日人均营销量
|
|
|
+ weekTelNo:total.weeklyTelNo,//周电话量
|
|
|
+ weekFollowNo:total.weeklyFollowNo,//周总量
|
|
|
+ weekVisitNo:total.weeklyVisitNo,//周外拜量
|
|
|
+ monthsTelNo:total.monthTelNo,//月电话量
|
|
|
+ monthsFollowNo:total.monthFollowNo,//月总量
|
|
|
+ monthsVisitNo:total.monthVisitNo,//月外拜量
|
|
|
+ annualTelNo:total.yearTelNo,//年电话量
|
|
|
+ annualFollowNo:total.yearFollowNo,//年总量
|
|
|
+ annualVisitNo:total.yearVisitNo,//年外拜量
|
|
|
+ }
|
|
|
+ )
|
|
|
+ }
|
|
|
this.setState({
|
|
|
- dataSource: theArr,
|
|
|
- pagination: this.state.pagination,
|
|
|
+ dataSource: theArr,
|
|
|
})
|
|
|
}.bind(this),
|
|
|
}).always(function() {
|
|
@@ -105,7 +98,7 @@ const TimeStatistics = React.createClass({
|
|
|
});
|
|
|
}.bind(this));
|
|
|
},
|
|
|
- totalData(page) {
|
|
|
+ totalData(timeTypes) {
|
|
|
this.setState({
|
|
|
loading: true
|
|
|
});
|
|
@@ -113,11 +106,13 @@ const TimeStatistics = React.createClass({
|
|
|
method: "get",
|
|
|
dataType: "json",
|
|
|
crossDomain: false,
|
|
|
- url: globalConfig.context + "/api/admin/report/sales/total",
|
|
|
+ url: globalConfig.context + "/api/admin/report/sales/countMarketingStatistics",
|
|
|
data: {
|
|
|
- date:this.state.selTime?(this.state.selTime+' '+'00:00:00'):'',
|
|
|
- depName:this.state.departmentSearch,
|
|
|
- name:this.state.uesrNameSearch,
|
|
|
+ type:'1',
|
|
|
+ timeType:this.state.releaseDate[0]?4:timeTypes,
|
|
|
+ startDate: this.state.releaseDate[0]?(this.state.releaseDate[0]+' '+'00:00:00'):'',
|
|
|
+ endDate: this.state.releaseDate[1]?(this.state.releaseDate[1]+' '+'00:00:00'):'',
|
|
|
+ depId:this.state.superId,//部门机构
|
|
|
},
|
|
|
success: function(data) {
|
|
|
let thedata = data.data;
|
|
@@ -128,7 +123,8 @@ const TimeStatistics = React.createClass({
|
|
|
};
|
|
|
thedata = {};
|
|
|
}
|
|
|
- this.loadData(thedata,page)
|
|
|
+ this.loadData(timeTypes,thedata)
|
|
|
+ this.selectSuperId();
|
|
|
}.bind(this),
|
|
|
}).always(function() {
|
|
|
this.setState({
|
|
@@ -136,73 +132,170 @@ const TimeStatistics = React.createClass({
|
|
|
});
|
|
|
}.bind(this));
|
|
|
},
|
|
|
- departmentList() {
|
|
|
- this.setState({
|
|
|
- loading: true
|
|
|
- });
|
|
|
- $.ajax({
|
|
|
- method: "post",
|
|
|
- dataType: "json",
|
|
|
- crossDomain: false,
|
|
|
- url: globalConfig.context + "/api/admin/organization/selectSuperId",
|
|
|
- data: {
|
|
|
+ //时间选择
|
|
|
+ selTime(value,index){
|
|
|
+ this.setState({
|
|
|
+ Dtime:value,
|
|
|
+ selTime:index
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //获取上级组织
|
|
|
+ selectSuperId() {
|
|
|
+ this.state.data = []
|
|
|
+ $.ajax({
|
|
|
+ method: "post",
|
|
|
+ dataType: "json",
|
|
|
+ crossDomain: false,
|
|
|
+ url: globalConfig.context + "/api/admin/organization/selectSuperId",
|
|
|
+ data:{
|
|
|
+
|
|
|
+ },
|
|
|
+ success: function (data) {
|
|
|
+ let theArr = [];
|
|
|
+ let theId=[];//用于保存上级组织的ID和名称
|
|
|
+ let thedata=data.data;
|
|
|
+ if (!thedata) {
|
|
|
+ if (data.error && data.error.length) {
|
|
|
+ message.warning(data.error[0].message);
|
|
|
+ };
|
|
|
+ thedata = {};
|
|
|
+ };
|
|
|
+ var contactIds=[];
|
|
|
+ for(var i=0;i<data.data.length;i++){
|
|
|
+ let theData = data.data[i];
|
|
|
+ theArr.push(
|
|
|
+ <Select.Option value={theData.id} key={theData.id}>{theData.name}</Select.Option>
|
|
|
+ );
|
|
|
+ theId.push(
|
|
|
+ [theData.id,theData.name]
|
|
|
+ );
|
|
|
+ };
|
|
|
+ this.setState({
|
|
|
+ SuperArr:thedata,
|
|
|
+ contactsOption: theArr,
|
|
|
+ theId: theId,
|
|
|
+ orderStatusOptions:data.data,
|
|
|
+ });
|
|
|
+
|
|
|
+ }.bind(this),
|
|
|
+ }).always(function () {
|
|
|
+ this.setState({
|
|
|
+ loading: false
|
|
|
+ });
|
|
|
+ }.bind(this));
|
|
|
+ },
|
|
|
+ //判断浏览器类型
|
|
|
+ getExplorer() {
|
|
|
+ var explorer = window.navigator.userAgent;
|
|
|
+ //ie
|
|
|
+ if(explorer.indexOf("MSIE") >= 0) {
|
|
|
+ return 'ie';
|
|
|
+ }
|
|
|
+ //firefox
|
|
|
+ else if(explorer.indexOf("Firefox") >= 0) {
|
|
|
+ return 'Firefox';
|
|
|
+ }
|
|
|
+ //Chrome
|
|
|
+ else if(explorer.indexOf("Chrome") >= 0) {
|
|
|
+ return 'Chrome';
|
|
|
+ }
|
|
|
+ //Opera
|
|
|
+ else if(explorer.indexOf("Opera") >= 0) {
|
|
|
+ return 'Opera';
|
|
|
+ }
|
|
|
+ //Safari
|
|
|
+ else if(explorer.indexOf("Safari") >= 0) {
|
|
|
+ return 'Safari';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //导出为exel表格
|
|
|
+ tabExel() {
|
|
|
+ var table = document.querySelector('#daochu');
|
|
|
+ var idTmr;
|
|
|
+ //debugger;
|
|
|
+ //整个表格拷贝到EXCEL中
|
|
|
+ if(this.getExplorer() == 'ie') {
|
|
|
+ var curTbl = document.getElementById(tableid);
|
|
|
+ var oXL = new ActiveXObject("Excel.Application");
|
|
|
+ //创建AX对象excel
|
|
|
+ var oWB = oXL.Workbooks.Add();
|
|
|
+ //获取workbook对象
|
|
|
+ var xlsheet = oWB.Worksheets(1);
|
|
|
+ //激活当前sheet
|
|
|
+ var sel = document.body.createTextRange();
|
|
|
+ sel.moveToElementText(curTbl);
|
|
|
+ //把表格中的内容移到TextRange中
|
|
|
+ sel.select();
|
|
|
+ //全选TextRange中内容
|
|
|
+ sel.execCommand("Copy");
|
|
|
+ //复制TextRange中内容
|
|
|
+ xlsheet.Paste();
|
|
|
+ //粘贴到活动的EXCEL中
|
|
|
+ oXL.Visible = true;
|
|
|
+ //设置excel可见属性
|
|
|
+ try {
|
|
|
+ var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");
|
|
|
+ } catch(e) {
|
|
|
+ print("Nested catch caught " + e);
|
|
|
+ } finally {
|
|
|
+ oWB.SaveAs(fname);
|
|
|
|
|
|
+ oWB.Close(savechanges = false);
|
|
|
+ //xls.visible = false;
|
|
|
+ oXL.Quit();
|
|
|
+ oXL = null;
|
|
|
+ //结束excel进程,退出完成
|
|
|
+ //window.setInterval("Cleanup();",1);
|
|
|
+ idTmr = window.setInterval("Cleanup();", 1);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.log(table);
|
|
|
+ this.tableToExcel(table,this.getExplorer());
|
|
|
+ }
|
|
|
+ function Cleanup() {
|
|
|
+ window.clearInterval(idTmr);
|
|
|
+ CollectGarbage();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ tableToExcel(table,name) {
|
|
|
+ var uri = 'data:application/vnd.ms-excel;base64,',
|
|
|
+ template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>',
|
|
|
+ base64 = function(s) {
|
|
|
+ return window.btoa(unescape(encodeURIComponent(s)))
|
|
|
},
|
|
|
- success: function(data) {
|
|
|
- let thedata = data.data;
|
|
|
- let theArr = [];
|
|
|
- if(!thedata) {
|
|
|
- if(data.error && data.error.length) {
|
|
|
- message.warning(data.error[0].message);
|
|
|
- };
|
|
|
- thedata = {};
|
|
|
- } else {
|
|
|
- thedata.map(function(item, index) {
|
|
|
- theArr.push({
|
|
|
- key: index,
|
|
|
- name: item.name,
|
|
|
- id: item.id,
|
|
|
- depNo: item.depNo
|
|
|
- })
|
|
|
+ format = function(s, c) {
|
|
|
+ return s.replace(/{(\w+)}/g,
|
|
|
+ function(m, p) {
|
|
|
+ return c[p];
|
|
|
})
|
|
|
- }
|
|
|
- this.setState({
|
|
|
- departmentArr: theArr,
|
|
|
- })
|
|
|
- }.bind(this),
|
|
|
- }).always(function() {
|
|
|
- this.setState({
|
|
|
- loading: false
|
|
|
- });
|
|
|
- }.bind(this));
|
|
|
+ }
|
|
|
+ console.log(table.nodeType);
|
|
|
+ if(!table.nodeType) table = document.getElementById(table);
|
|
|
+ console.log(table);
|
|
|
+ var ctx = {
|
|
|
+ worksheet: name || 'Worksheet',
|
|
|
+ table: table.innerHTML
|
|
|
+ };
|
|
|
+ window.location.href = uri + base64(format(template, ctx))
|
|
|
},
|
|
|
getInitialState() {
|
|
|
return {
|
|
|
+ releaseDate: [],
|
|
|
selectedRowKeys: [],
|
|
|
selectedRows: [],
|
|
|
loading: false,
|
|
|
visible: false,
|
|
|
showDesc: false,
|
|
|
timeState:false,
|
|
|
- pagination: {
|
|
|
- defaultCurrent: 1,
|
|
|
- defaultPageSize: 11,
|
|
|
- showQuickJumper: true,
|
|
|
- pageSize: 11,
|
|
|
- onChange: function (page) {
|
|
|
- this.totalData(page);
|
|
|
- }.bind(this),
|
|
|
- showTotal: function (total) {
|
|
|
- return '共' + total + '条数据';
|
|
|
- }
|
|
|
- },
|
|
|
+ Dtime:undefined,
|
|
|
+ selTime:'',
|
|
|
columns: [
|
|
|
{
|
|
|
title: '序号',
|
|
|
dataIndex: 'nub',
|
|
|
width:50,
|
|
|
- fixed:true,
|
|
|
key: 'nub',
|
|
|
+ fixed:false,
|
|
|
render:(text,record)=>{
|
|
|
if(!record.theNumber){
|
|
|
return text
|
|
@@ -210,20 +303,37 @@ const TimeStatistics = React.createClass({
|
|
|
return {
|
|
|
children: text,
|
|
|
props: {
|
|
|
- colSpan:1
|
|
|
+ colSpan:0
|
|
|
+ },
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '部门',
|
|
|
+ dataIndex: 'departmentName',
|
|
|
+ key: 'departmentName',
|
|
|
+ width:200,
|
|
|
+ fixed:false,
|
|
|
+ render:(text,record)=>{
|
|
|
+ if(!record.theNumber){
|
|
|
+ return text&&text.length>6?<span title={text}>{text.substr(0,6)+'…'}</span>:text
|
|
|
+ }else{
|
|
|
+ return {
|
|
|
+ children: text,
|
|
|
+ props: {
|
|
|
+ colSpan:3
|
|
|
},
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- },
|
|
|
- {
|
|
|
- title: '姓名',
|
|
|
- dataIndex: 'name',
|
|
|
- width:100,
|
|
|
- fixed:true,
|
|
|
- key: 'name',
|
|
|
+ }, {
|
|
|
+ title: '总经理',
|
|
|
+ fixed:false,
|
|
|
+ dataIndex: 'departmentManagerName',
|
|
|
+ key: 'departmentManagerName',
|
|
|
render:(text,record)=>{
|
|
|
if(!record.theNumber){
|
|
|
return text
|
|
@@ -238,33 +348,34 @@ const TimeStatistics = React.createClass({
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- },{
|
|
|
- title: '部门',
|
|
|
- dataIndex: 'departmentName',
|
|
|
- width:100,
|
|
|
- fixed:true,
|
|
|
- key: 'departmentName',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '营销总量',
|
|
|
+ fixed:false,
|
|
|
+ dataIndex: 'departmentNumber',
|
|
|
+ key: 'departmentNumber',
|
|
|
+ sorter: (a, b) => a.departmentNumber - b.departmentNumber,
|
|
|
render:(text,record)=>{
|
|
|
if(!record.theNumber){
|
|
|
- return text&&text.length>6?<span title={text}>{text.substr(0,6)+'…'}</span>:text
|
|
|
+ return text
|
|
|
}else{
|
|
|
return {
|
|
|
children: text,
|
|
|
props: {
|
|
|
- colSpan:4
|
|
|
+ colSpan:1
|
|
|
},
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- },
|
|
|
+ },
|
|
|
{
|
|
|
- title: '职务',
|
|
|
- dataIndex: 'position',
|
|
|
- key: 'position',
|
|
|
- fixed:true,
|
|
|
- width:100,
|
|
|
+ title: '电话量',
|
|
|
+ fixed:false,
|
|
|
+ dataIndex: 'privateCustomersCount',
|
|
|
+ key: 'privateCustomersCount',
|
|
|
+ sorter: (a, b) => a.privateCustomersCount - b.privateCustomersCount,
|
|
|
render:(text,record)=>{
|
|
|
if(!record.theNumber){
|
|
|
return text
|
|
@@ -272,19 +383,20 @@ const TimeStatistics = React.createClass({
|
|
|
return {
|
|
|
children: text,
|
|
|
props: {
|
|
|
- colSpan:0
|
|
|
+ colSpan:1
|
|
|
},
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- },{
|
|
|
- title: '入职时间',
|
|
|
- width:100,
|
|
|
- fixed:true,
|
|
|
- dataIndex: 'enrollTime',
|
|
|
- key: 'enrollTime',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '外拜量',
|
|
|
+ fixed:false,
|
|
|
+ dataIndex: 'dailyFollowNo',
|
|
|
+ key: 'dailyFollowNo',
|
|
|
+ sorter: (a, b) => a.dailyFollowNo - b.dailyFollowNo,
|
|
|
render:(text,record)=>{
|
|
|
if(!record.theNumber){
|
|
|
return text
|
|
@@ -292,164 +404,36 @@ const TimeStatistics = React.createClass({
|
|
|
return {
|
|
|
children: text,
|
|
|
props: {
|
|
|
- colSpan:0
|
|
|
+ colSpan:1
|
|
|
},
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- },{
|
|
|
- title: '当日营销客户数',
|
|
|
- children: [
|
|
|
- {
|
|
|
- title: '总数',
|
|
|
- dataIndex: 'num',
|
|
|
- width:70,
|
|
|
- key: 'num',
|
|
|
- sorter: (a, b) => a.num - b.num,
|
|
|
- },{
|
|
|
- title: '新增',
|
|
|
- dataIndex: 'age2',
|
|
|
- width:70,
|
|
|
- key: 'age2',
|
|
|
- sorter: (a, b) => a.age - b.age,
|
|
|
- },{
|
|
|
- title: '回访',
|
|
|
- width:70,
|
|
|
- dataIndex: 'age3',
|
|
|
- key: 'age3',
|
|
|
- sorter: (a, b) => a.age - b.age,
|
|
|
- },{
|
|
|
- title: '有效',
|
|
|
- width:70,
|
|
|
- dataIndex: 'age4',
|
|
|
- key: 'age4',
|
|
|
- sorter: (a, b) => a.age - b.age,
|
|
|
- },
|
|
|
- ],
|
|
|
- }, {
|
|
|
- title: '当日营销方式',
|
|
|
- children: [
|
|
|
- {
|
|
|
- title: '总数',
|
|
|
- width:70,
|
|
|
- dataIndex: 'age11',
|
|
|
- key: 'age11',
|
|
|
- sorter: (a, b) => a.age - b.age,
|
|
|
- },{
|
|
|
- title: '电话',
|
|
|
- width:70,
|
|
|
- dataIndex: 'age22',
|
|
|
- key: 'age22',
|
|
|
- sorter: (a, b) => a.age - b.age,
|
|
|
- },{
|
|
|
- title: '外拜',
|
|
|
- width:70,
|
|
|
- dataIndex: 'age33',
|
|
|
- key: 'age33',
|
|
|
- sorter: (a, b) => a.age - b.age,
|
|
|
- },{
|
|
|
- title: '邮件',
|
|
|
- width:70,
|
|
|
- dataIndex: 'age44',
|
|
|
- key: 'age44',
|
|
|
- sorter: (a, b) => a.age - b.age,
|
|
|
- },{
|
|
|
- title: '微信',
|
|
|
- width:70,
|
|
|
- dataIndex: 'age55',
|
|
|
- key: 'age55',
|
|
|
- sorter: (a, b) => a.age - b.age,
|
|
|
- }
|
|
|
- ],
|
|
|
},
|
|
|
{
|
|
|
- title: '本日签单业绩',
|
|
|
- children: [
|
|
|
- {
|
|
|
- title: '数量',
|
|
|
- width:70,
|
|
|
- dataIndex: 'dailyOrderCount',
|
|
|
- key: 'dailyOrderCount',
|
|
|
- sorter: (a, b) => a.dailyOrderCount - b.dailyOrderCount,
|
|
|
- },{
|
|
|
- title: '金额',
|
|
|
- width:70,
|
|
|
- dataIndex: 'dailyOrderAmount',
|
|
|
- key: 'dailyOrderAmount',
|
|
|
- sorter: (a, b) => a.dailyOrderAmount - b.dailyOrderAmount,
|
|
|
- }
|
|
|
- ],
|
|
|
- },{
|
|
|
- title: '本周签单业绩',
|
|
|
- children: [
|
|
|
- {
|
|
|
- title: '数量',
|
|
|
- width:70,
|
|
|
- dataIndex: 'weeklyOrderCount',
|
|
|
- key: 'weeklyOrderCount',
|
|
|
- sorter: (a, b) => a.weeklyOrderCount - b.weeklyOrderCount,
|
|
|
- },{
|
|
|
- title: '金额',
|
|
|
- width:70,
|
|
|
- dataIndex: 'weeklyOrderAmount',
|
|
|
- key: 'weeklyOrderAmount',
|
|
|
- sorter: (a, b) => a.weeklyOrderAmount - b.weeklyOrderAmount,
|
|
|
- }
|
|
|
- ],
|
|
|
- },{
|
|
|
- title: '本月签单业绩',
|
|
|
- children: [
|
|
|
- {
|
|
|
- title: '数量',
|
|
|
- width:70,
|
|
|
- dataIndex: 'monthlyOrderCount',
|
|
|
- key: 'monthlyOrderCount',
|
|
|
- sorter: (a, b) => a.monthlyOrderCount - b.monthlyOrderCount,
|
|
|
- },{
|
|
|
- title: '金额',
|
|
|
- width:70,
|
|
|
- dataIndex: 'monthlyOrderAmount',
|
|
|
- key: 'monthlyOrderAmount',
|
|
|
- sorter: (a, b) => a.monthlyOrderAmount - b.monthlyOrderAmount,
|
|
|
- }
|
|
|
- ],
|
|
|
- },{
|
|
|
- title: '本季签单业绩',
|
|
|
- children: [
|
|
|
- {
|
|
|
- title: '数量',
|
|
|
- width:70,
|
|
|
- dataIndex: 'quarterlyOrderCount',
|
|
|
- key: 'quarterlyOrderCount',
|
|
|
- sorter: (a, b) => a.quarterlyOrderCount - b.quarterlyOrderCount,
|
|
|
- },{
|
|
|
- title: '金额',
|
|
|
- width:70,
|
|
|
- dataIndex: 'quarterlyOrderAmount',
|
|
|
- key: 'quarterlyOrderAmount',
|
|
|
- sorter: (a, b) => a.quarterlyOrderAmount - b.quarterlyOrderAmount,
|
|
|
- }
|
|
|
- ],
|
|
|
- },{
|
|
|
- title: '本年签单业绩',
|
|
|
- children: [
|
|
|
- {
|
|
|
- title: '数量',
|
|
|
- width:70,
|
|
|
- dataIndex: 'annuallyOrderCount',
|
|
|
- key: 'annuallyOrderCount',
|
|
|
- sorter: (a, b) => a.annuallyOrderCount - b.annuallyOrderCount,
|
|
|
- },{
|
|
|
- title: '金额',
|
|
|
- width:70,
|
|
|
- dataIndex: 'annuallyOrderAmount',
|
|
|
- key: 'annuallyOrderAmount',
|
|
|
- sorter: (a, b) => a.annuallyOrderAmount - b.annuallyOrderAmount,
|
|
|
- }
|
|
|
- ],
|
|
|
+ title: '营销日均量',
|
|
|
+ fixed:false,
|
|
|
+ dataIndex: 'dailyAVG',
|
|
|
+ key: 'dailyAVG',
|
|
|
+ sorter: (a, b) => a.dailyAVG - b.dailyAVG,
|
|
|
+ render:(text,record)=>{
|
|
|
+ if(!record.theNumber){
|
|
|
+ return text
|
|
|
+ }else{
|
|
|
+ return {
|
|
|
+ children: text,
|
|
|
+ props: {
|
|
|
+ colSpan:1
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
],
|
|
|
dataSource: [],
|
|
|
};
|
|
@@ -458,23 +442,39 @@ const TimeStatistics = React.createClass({
|
|
|
this.totalData()
|
|
|
},
|
|
|
reset() {
|
|
|
- this.state.departmentSearch = undefined;
|
|
|
- this.state.postSearch = undefined;
|
|
|
- this.state.uesrNameSearch = '';
|
|
|
- this.state.Dtime = undefined;
|
|
|
- this.state.selTime='';
|
|
|
- this.state.timeState=false;
|
|
|
- this.totalData();
|
|
|
+ this.state.superId = undefined;//部门机构清零
|
|
|
+ this.totalData()
|
|
|
+ this.setState({
|
|
|
+ order:"false"
|
|
|
+ })
|
|
|
+ },
|
|
|
+ week(){
|
|
|
+ this.state.releaseDate[0] = undefined;//开始时间清零
|
|
|
+ this.state.releaseDate[1] = undefined;//结束时间清零
|
|
|
+ this.totalData(0);
|
|
|
+ },
|
|
|
+ month(){
|
|
|
+ this.state.releaseDate[0] = undefined;//开始时间清零
|
|
|
+ this.state.releaseDate[1] = undefined;//结束时间清零
|
|
|
+ this.totalData(1);
|
|
|
+ },
|
|
|
+ quarter(){
|
|
|
+ this.state.releaseDate[0] = undefined;//开始时间清零
|
|
|
+ this.state.releaseDate[1] = undefined;//结束时间清零
|
|
|
+ this.totalData(2);
|
|
|
+ },
|
|
|
+ year(){
|
|
|
+ this.state.releaseDate[0] = undefined;//开始时间清零
|
|
|
+ this.state.releaseDate[1] = undefined;//结束时间清零
|
|
|
+ this.totalData(3);
|
|
|
+ },
|
|
|
+ //重构排序
|
|
|
+ tabChange(pagination,filter,sorter){
|
|
|
+ console.log(pagination)
|
|
|
+ console.log(sorter)
|
|
|
},
|
|
|
- //时间选择
|
|
|
- selTime(value,index){
|
|
|
- this.setState({
|
|
|
- Dtime:value,
|
|
|
- selTime:index
|
|
|
- })
|
|
|
- },
|
|
|
componentWillMount() {
|
|
|
- this.departmentList();
|
|
|
+ //this.loadData();
|
|
|
this.totalData();
|
|
|
let times=new Date();
|
|
|
let nowTime=times.getFullYear()+'年'+(times.getMonth()+1)+'月'+times.getDate()+'日';
|
|
@@ -483,48 +483,90 @@ const TimeStatistics = React.createClass({
|
|
|
})
|
|
|
},
|
|
|
render() {
|
|
|
+ const { RangePicker } = DatePicker;
|
|
|
let departmentArr = this.state.departmentArr || [];
|
|
|
return(
|
|
|
<div className='set-content'>
|
|
|
- <span style={{fontSize:'20px'}}>个人业绩统计报表</span>
|
|
|
+ <p style={{fontSize:'20px',marginBottom:'10px'}}>客户营销统计表(部门)</p>
|
|
|
<div className="clearfix">
|
|
|
- <Select placeholder="部门机构"
|
|
|
- style={{ width: 150 ,marginRight:'10px',marginTop:'10px',marginBottom:'10px'}}
|
|
|
- value={this.state.departmentSearch}
|
|
|
- onChange={(e) => { this.setState({ departmentSearch: e }) }}>
|
|
|
- {
|
|
|
- departmentArr.map(function (item) {
|
|
|
- return <Select.Option key={item.name} >{item.name}</Select.Option>
|
|
|
- })
|
|
|
- }
|
|
|
- </Select>
|
|
|
- <Input value={this.state.uesrNameSearch} placeholder="用户姓名" style={{width:'150px',marginRight:'5px'}}
|
|
|
- onChange={(e)=>{this.setState({uesrNameSearch:e.target.value})}} />
|
|
|
- <span style={{fontSize:'16px'}}>选择日期 : </span>
|
|
|
- <DatePicker onChange={this.selTime} value={this.state.Dtime}/>
|
|
|
+ <Button type="primary" onClick={this.tabExel} style={{ float:'right' }}>导出到表格</Button>
|
|
|
+ <span style={{fontSize:'16px'}}>部门机构 : </span>
|
|
|
+ <Select placeholder="选择部门"
|
|
|
+ style={{ width:'200px',marginRight:'10px' }}
|
|
|
+ value={this.state.superId}
|
|
|
+ onChange={(e) => { this.setState({ superId: e }) }} notFoundContent="未获取到上级组织列表">
|
|
|
+ {this.state.contactsOption}
|
|
|
+ </Select>
|
|
|
+ <Button onClick={this.week} style={{marginRight:'5px'}}>本周</Button>
|
|
|
+ <Button onClick={this.month} style={{marginRight:'5px'}}>本月</Button>
|
|
|
+ <Button onClick={this.quarter} style={{marginRight:'5px'}}>本季</Button>
|
|
|
+ <Button onClick={this.year} style={{marginRight:'5px'}}>本年</Button>
|
|
|
+ <span className="titleTime" style={{marginRight:'5px'}}>起止时间:</span>
|
|
|
+ <RangePicker
|
|
|
+ value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
|
|
|
+ this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
|
|
|
+ onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
|
|
|
<Button type="primary" onClick={this.search} style={{marginLeft:'10px',marginRight:'10px'}}>搜索</Button>
|
|
|
<Button onClick={this.reset}>重置</Button>
|
|
|
</div>
|
|
|
- <div className="surfaceTitle">
|
|
|
- <span className="nowtime">{this.state.timeState?this.state.txtTime:this.state.Nowtime}</span>
|
|
|
- <span>个人营销业绩统计表</span>
|
|
|
- <span>(每日17:00统计当天数据)</span>
|
|
|
- </div>
|
|
|
- <div className="patent-table">
|
|
|
- <div className="scroll">
|
|
|
- <Spin spinning={this.state.loading}>
|
|
|
- <Table columns={this.state.columns}
|
|
|
- dataSource={this.state.dataSource}
|
|
|
- bordered
|
|
|
- scroll={{x:1780}}
|
|
|
- pagination={this.state.pagination}
|
|
|
- />
|
|
|
- </Spin>
|
|
|
- </div>
|
|
|
+ <div id='daochu'>
|
|
|
+ <div className="surfaceTitle">
|
|
|
+ <span className="nowtime">{this.state.timeState?this.state.txtTime:this.state.Nowtime}</span>
|
|
|
+ <span>客户营销统计表(部门)</span>
|
|
|
+ </div>
|
|
|
+ <div className="patent-table" id='daochu'>
|
|
|
+ <div className="scroll">
|
|
|
+ <Spin spinning={this.state.loading}>
|
|
|
+ <Table columns={this.state.columns}
|
|
|
+ dataSource={this.state.dataSource}
|
|
|
+ //scroll={{ x: 600,y:500}}
|
|
|
+ bordered
|
|
|
+ onChange={this.tabChange}
|
|
|
+ pagination={false}
|
|
|
+ />
|
|
|
+ </Spin>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
)
|
|
|
}
|
|
|
});
|
|
|
|
|
|
-export default TimeStatistics;
|
|
|
+
|
|
|
+
|
|
|
+const Tablees=Form.create()(React.createClass({
|
|
|
+ //详情tab切换数据处理
|
|
|
+ callbacks(e) {
|
|
|
+ this.setState({
|
|
|
+ callnubs: e,
|
|
|
+ })
|
|
|
+ if(e == '1') {
|
|
|
+
|
|
|
+ }
|
|
|
+ if(e == '2') {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ getInitialState() {
|
|
|
+ return {
|
|
|
+ callnubs: "1",
|
|
|
+ }
|
|
|
+ },
|
|
|
+ render() {
|
|
|
+ return(
|
|
|
+ <div className="clearfix" style={{marginTop:'0px',marginLeft:'10px'}}>
|
|
|
+ <Tabs onChange={this.callbacks} type="card" activeKey={this.state.callnubs} style={{paddingLeft:'15px',paddingRight:'15px',marginRight:'20px'}}>
|
|
|
+ <TabPane tab="客户营销统计表(部门)" key="1" >
|
|
|
+ <DiurnalStatistics />
|
|
|
+ </TabPane>
|
|
|
+ <TabPane tab="客户营销统计表(员工)" key="2">
|
|
|
+ <DiurnalStatisticsOne />
|
|
|
+ </TabPane>
|
|
|
+ </Tabs>
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ }
|
|
|
+}));
|
|
|
+export default Tablees;
|