| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631 | "use strict";import React from 'react';import ReactDom from 'react-dom';import ajax from 'jquery/src/ajax/xhr.js';import $ from 'jquery/src/ajax';import {  Form,  Radio,  Icon,  Button,  Input,  Select,  Spin,  Table,  Switch,  message,  DatePicker,  Modal,  Upload,  Popconfirm,  Tabs, Tag} from 'antd';import moment from 'moment';import '../../order/userMangagement.less';import { orderState, orderChannel, orderType } from '../../../dataDic.js';import { getProjectState, getOrderChannel, getOrderType, getOrderState, getPaymentState, getApprovedState } from '../../../tools.js';import { ChooseList } from "../../order/orderNew/chooseList";const { TabPane } = Tabsconst AdminCustomerStatistics = Form.create()(React.createClass({  loadData(pageNo) {    this.state.data = [];    this.setState({      loading: true    });    $.ajax({      method: "get",      dataType: "json",      crossDomain: false,      url: globalConfig.context + '/api/admin/customer/selectAdminCustomerStatistics',      data: {        pageNo: pageNo || 1,        pageSize: this.state.pagination.pageSize,        depId: this.state.departmenttSearch, //部门        startTime: this.state.releaseDate[0],        endTime: this.state.releaseDate[1],      },      success: function (data) {        let theArr = [];        if (!data.data) {          if (data.error && data.error.length) {            message.warning(data.error[0].message);          };        } else {          for (let i = 0; i < data.data.list.length; i++) {            let thisdata = data.data.list[i];            theArr.push({              key: pageNo ? (i + 1 + (pageNo - 1) * 10) : i + 1,              aid: thisdata.aid,              aName: thisdata.aName,              depName: thisdata.depName,              userCount: thisdata.userCount,              signCount: thisdata.signCount,              newCount: thisdata.newCount,              receiveCount: thisdata.receiveCount,              transferCount: thisdata.transferCount,            });          };          this.state.pagination.current = data.data.pageNo;          this.state.pagination.total = data.data.totalCount;        };        if (!data.data.list.length) {          this.state.pagination.current = 0          this.state.pagination.total = 0        }        this.setState({          pageNo: pageNo,          dataSource: theArr,          pagination: this.state.pagination,          // 					selectedRowKeys: [],          // 					signBillVisible: false        });      }.bind(this),    }).always(function () {      this.setState({        loading: false      });    }.bind(this));  },  //部门  departmentList() {    this.setState({      loading: true    });    $.ajax({      method: "get",      dataType: "json",      crossDomain: false,      url: globalConfig.context + "/api/admin/organization/selectSuperId",      data: {      },      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,            })          })        }        this.setState({          departmentArr: theArr,        })      }.bind(this),    }).always(function () {      this.setState({        loading: false      });    }.bind(this));  },  //操作分配  confirmDelet(index) {    this.setState({      orderNot: index.orderNo,      userDetaile: false,      distributionVisible: true    });  },  distributionCancel() {    this.setState({      distributionVisible: false    })  },  distributionOk() {    this.setState({      distributionVisible: false    })  },  //分配对象列表  contactList() {    $.ajax({      method: "get",      dataType: "json",      crossDomain: false,      url: globalConfig.context + '/api/admin/superviser/adminList',      data: {        pageNo: 1,        pageSize: 99,        departmentId: this.state.departmenttList,        name: this.state.financeNameSearch,      },      success: function (data) {        let theArr = [];        if (!data.data) {          if (data.error && data.error.length) {            message.warning(data.error[0].message);          };        } else {          for (let i = 0; i < data.data.list.length; i++) {            let thisdata = data.data.list[i];            theArr.push({              key: i,              id: thisdata.id,              userNo: thisdata.userNo,              name: thisdata.name,              departmentName: thisdata.departmentName,              departmentId: thisdata.departmentId,              position: thisdata.position,              mobile: thisdata.mobile,            });          };        };        this.setState({          distributionList: theArr,        });      }.bind(this),    }).always(function () {      this.setState({        loading: false      });    }.bind(this));  },  //选定对象  confirmSelect(record) {    this.setState({      loading: true    });    $.ajax({      method: "POST",      dataType: "json",      crossDomain: false,      url: globalConfig.context + "/api/admin/order/distributionOrder",      data: {        orderNo: this.state.orderNot,        financeId: record.id      }    }).done(function (data) {      if (!data.error.length) {        message.success('分派成功!');        this.setState({          loading: false,        });        this.distributionOk();      } else {        message.warning(data.error[0].message);      };      this.loadData(this.state.pageNo);    }.bind(this));  },  componentWillMount() {    this.departmentList();    this.loadData();  },  getInitialState() {    return {      rowKey: 0,      datauser: {},      selectedRowKeys: [],      releaseDate: [],      selectedRows: [],      departmentArr: [],      searchMore: true,      loading: false,      distributionVisible: false,      visible: false,      showDesc: false,      pagination: {        defaultCurrent: 1,        defaultPageSize: 10,        showQuickJumper: true,        pageSize: 10,        onChange: function (page) {          this.loadData(page);        }.bind(this),        showTotal: function (total) {          return '共' + total + '条数据';        }      },      paginationX: {        defaultCurrent: 1,        defaultPageSize: 10,        showQuickJumper: true,        pageSize: 10,        onChange: function (page) {          this.xiangmu(page, this.state.rowKey, this.state.type);        }.bind(this),        showTotal: function (total) {          return '共' + total + '条数据';        }      },      columns: [{        title: '编号',        dataIndex: 'key',        key: 'key',        align: 'center',      },      {        title: '营销员名称',        dataIndex: 'aName',        key: 'aName',        align: 'center',      },      {        title: '部门名称',        dataIndex: 'depName',        key: 'depName',        align: 'center',      },      {        title: '私有客户数',        dataIndex: 'userCount',        key: 'userCount',        align: 'center',        render: (text, record, index) => {          return <div style={{ padding: "10px 8px" }} onClick={() => {            this.userCount(record, index)          }} className="single">{text}</div>        }      },      {        title: '签单客户数量',        dataIndex: 'signCount',        key: 'signCount',        render: (text, record, index) => {          return <div style={{ padding: "10px 8px" }} onClick={() => {            this.signedQuantity(record, index)          }} className="single">{text}</div>        }      },      {        title: '时间内新增客户数',        dataIndex: 'newCount',        key: 'newCount',        render: (text, record, index) => {          return <div style={{ padding: "10px 8px" }} onClick={() => {            this.inputCount(record, index)          }} className="single">{text}</div>        }      },      {        title: '时间内领取客户数',        dataIndex: 'receiveCount',        key: 'receiveCount',        render: (text, record, index) => {          return <div style={{ padding: "10px 8px" }} onClick={() => {            this.receiveCount(record, index)          }} className="single">{text}</div>        }      },      {        title: '时间内转交客户数',        dataIndex: 'transferCount',        key: 'transferCount',        render: (text, record, index) => {          return <div style={{ padding: "10px 8px" }} onClick={() => {            this.transferCount(record, index)          }} className="single">{text}</div>        }      }      ],      dataSource: [],      dataSourceX: [],      columnsX: [{        title: '客户名称',        dataIndex: 'name',        key: 'name'      }, {        title: '来源',        dataIndex: 'sourceName',        key: 'sourceName'      }, {        title: '联系人',        dataIndex: 'contacts',        key: 'contacts'      }, {        title: '联系人电话',        dataIndex: 'contactMobile',        key: 'contactMobile'      }, {        title: '创建时间',        dataIndex: 'createTime',        key: 'createTime',      }, {        title: '跟进时间',        dataIndex: 'followTime',        key: 'followTime',      }]    };  },  // 私有客户数  userCount(record, index) {    this.tableRowClick(record, index, 0)  },  // 签单客户数量  signedQuantity(record, index) {    this.tableRowClick(record, index, 2)  },  // 时间内新增客户数  inputCount(record, index) {    this.tableRowClick(record, index, 3)  },  // 时间内领取客户数  receiveCount(record, index) {    this.tableRowClick(record, index, 7)  },  // 时间内转交客户数  transferCount(record, index) {    this.tableRowClick(record, index, 8)  },  tableRowClick(record, index, type) {    this.xiangmu(1, record, type);    this.setState({      visible: true,      rowKey: record,      type: type,      aName: record.aName    });  },  xiangmu(pageNo, record, type) {    this.state.data = [];    this.setState({      loading: true    })    $.ajax({      method: "get",      dataType: "json",      crossDomain: false,      url: globalConfig.context + "/api/admin/customer/selectAdminCustomerList",      data: {        pageNo: pageNo || 1,        pageSize: this.state.paginationX.pageSize,        startTime: this.state.releaseDate[0],        endTime: this.state.releaseDate[1],        aid: record.aid,        type: type,      },      success: function (data) {        let theArr = [];        if (data.error.length || data.data.list == "") {          if (data.error && data.error.length) {            message.warning(data.error[0].message);          };        } else {          for (let i = 0; i < data.data.list.length; i++) {            let thisdata = data.data.list[i];            theArr.push({              key: i,              id: thisdata.id,              name: thisdata.name,              sourceName: thisdata.sourceName,              contacts: thisdata.contacts,              contactMobile: thisdata.contactMobile,              createTime: thisdata.createTime,              followTime: thisdata.followTime,            });          };          this.state.paginationX.current = pageNo;          this.state.paginationX.total = data.data.totalCount;        };        if (!data.data.list.length) {          this.state.paginationX.current = 0          this.state.paginationX.total = 0        }        this.setState({          dataSourceX: theArr,          paginationX: this.state.paginationX,          // 					selectedRowKeys: [],          // 					signBillVisible: false        });      }.bind(this),    }).always(function () {      this.setState({        loading: false      });    }.bind(this));  },  visitCancel(e) {    this.setState({      visible: false    })  },  visitOk(e) {    this.setState({      visible: false    })  },  closeDesc(e, s) {    this.state.userDetaile = false;    this.state.showDesc = e;    if (s) {      this.loadData(this.state.pageNo);    };  },  searchSwitch() {    this.setState({      searchMore: !this.state.searchMore    });  },  search() {    this.loadData();  },  //分配时搜索  searchOrder() {    this.contactList();  },  //分配时重置  resetOrder() {    this.setState({      departmenttList: undefined,      financeNameSearch: ''    })  },  reset() {    this.state.releaseDate[0] = undefined;    this.state.releaseDate[1] = undefined;    this.state.departmenttSearch = undefined;    this.state.approved = undefined;    this.state.isDistributionFinance = undefined;    this.loadData();  },  changeList(arr) {    const newArr = [];    this.state.columns.forEach(item => {      arr.forEach(val => {        if (val === item.title) {          newArr.push(item);        }      });    });    this.setState({      changeList: newArr    });  },  render() {    const rowSelection = {      selectedRowKeys: this.state.selectedRowKeys,      onChange: (selectedRowKeys, selectedRows) => {        this.setState({          selectedRows: selectedRows.slice(-1),          selectedRowKeys: selectedRowKeys.slice(-1)        });      },      onSelectAll: (selected, selectedRows, changeRows) => {        this.setState({          selectedRowKeys: []        })      },    };    let departmentArr = this.state.departmentArr || [];    const hasSelected = this.state.selectedRowKeys.length > 0;    const {      RangePicker    } = DatePicker;    return (      <div className="user-content" >        <div className="content-title">          <span>部门客户统计</span>          <Tabs            defaultActiveKey="1"            onChange={this.callback}            className="test"          >            <TabPane tab="搜索" key="1">              <div className="user-search">                {/*<Input placeholder="客户名称" style={{width:'150px'}} 	                        value={this.state.buyerNameSearch}	                        onChange={(e) => { this.setState({ buyerNameSearch: e.target.value }); }} />						*/}                <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 }); }} />                <Select placeholder="订单部门"                  style={{ width: 150, marginRight: '10px', marginLeft: '10px' }}                  value={this.state.departmenttSearch}                  onChange={(e) => { this.setState({ departmenttSearch: e }) }}>                  {                    departmentArr.map(function (item) {                      return <Select.Option key={item.id} >{item.name}</Select.Option>                    })                  }                </Select>                <Button type="primary" onClick={this.search} style={{ marginLeft: '10px' }}>搜索</Button>                <Button onClick={this.reset}>重置</Button>                {/*<span style={{marginLeft:'10px',marginRight:'20px'}}>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>						*/}              </div>            </TabPane>            <TabPane tab="更改表格显示数据" key="2">              <div style={{ marginLeft: 10 }}>                <ChooseList                  columns={this.state.columns}                  changeFn={this.changeList}                  changeList={this.state.changeList}                  top={55}                  margin={11}                />              </div>            </TabPane>          </Tabs>          <div className="patent-table">            <Spin spinning={this.state.loading}>              <Table                size="middle"                columns={                  this.state.changeList                    ? this.state.changeList                    : this.state.columns                }                dataSource={this.state.dataSource}                pagination={this.state.pagination} />            </Spin>          </div>          <Modal maskClosable={false} visible={this.state.visible}            onOk={this.visitOk} onCancel={this.visitCancel}            width='1200px'            title={              <span>                <span style={{ marginRight: '15px' }}>客户详情</span>                <Tag color="#f50">{this.state.aName}</Tag>                <Tag color="#108ee9">                  {                    this.state.type === 0 ?                      '私有客户数' :                      this.state.type === 2 ?                        '签单客户数量' :                        this.state.type === 3 ?                          '时间内新增客户数' :                          this.state.type === 7 ?                            '时间内领取客户数' :                            this.state.type === 8 ?                              '时间内转交客户数' : '未知'                  }                </Tag>              </span>            }            footer=''            className="admin-desc-content">            <div className="patent-table">              <Spin spinning={this.state.loading}>                <Table columns={this.state.columnsX}                  dataSource={this.state.dataSourceX}                  pagination={this.state.paginationX}                />              </Spin>            </div>          </Modal>        </div >      </div>    );  }}));export default AdminCustomerStatistics;
 |