import React from 'react'; import { Icon, Button, Input, Select, Spin, Table, message,DatePicker, Upload, Form ,Modal,Col} from 'antd'; import $ from 'jquery/src/ajax'; import moment from 'moment'; import { getLiquidationStatus, getApprovedState, getProcessStatus, splitUrl, getjiedian, getboutique, getCuikuan, ShowModal } from "@/tools.js"; import './customer.less'; import ShowModalDiv from "@/showModal.jsx"; //图片组件 const PicturesWall = React.createClass({ getInitialState() { return { previewVisible: false, previewImage: '', fileList: [], } }, handleCancel() { this.setState({ previewVisible: false }) }, handlePreview(file) { this.setState({ previewImage: file.url || file.thumbUrl, previewVisible: true, }); }, handleChange(info) { let fileList = info.fileList; this.setState({ fileList }); this.props.fileList(fileList); }, componentWillReceiveProps(nextProps) { this.state.fileList = nextProps.pictureUrl; this.state.pojectApplicationUrl = undefined; }, render() { const { previewVisible, previewImage, fileList } = this.state; const uploadButton = ( <div> <Icon type="plus" /> <div className="ant-upload-text">点击上传</div> </div> ); return( <div style={{display:"inline-block"}}> <Upload action={globalConfig.context + "/api/admin/customer/uploadCustomerImg"} data={{ 'sign': '' }} listType="picture-card" fileList={fileList} onPreview={this.handlePreview} onChange={this.handleChange} > {fileList.length >= 1 ? null : uploadButton} </Upload> <Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}> <img alt="example" style={{ width: '100%' }} src={previewImage} /> </Modal> </div> ); } }); const IntentionCustomer = Form.create()(React.createClass({ loadData(pageNo) { this.setState({ visitModul:false, loading: true, ispage:pageNo, modalVisible:false }); $.ajax({ method: "get", dataType: "json", crossDomain: false, url: globalConfig.context +"/api/admin/newOrder/orderNewList", data: { pageNo: pageNo || 1, pageSize: this.state.pagination.pageSize, specially: 3,//审核列表 name: this.state.customerName,//名称 orderNo: this.state.orderNo,//订单编号 depId: this.state.departmenttSearch,//订单部门 starTime: this.state.releaseDate[0],//开始时间 endTime: this.state.releaseDate[1],//结束时间 }, success: function(data) { ShowModal(this); 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,//用户ID orderNo: thisdata.orderNo,//订单编号 totalAmount:thisdata.totalAmount,//签单金额 processStatus:thisdata.processStatus,//流程状态 liquidationStatus:thisdata.liquidationStatus,//结算状态 approval:thisdata.approval,//特批状态 signDate:thisdata.signDate,//签单时间 userName:thisdata.userName,//客户名称 salesmanName:thisdata.salesmanName,//营销员名称 financeName:thisdata.financeName,//财务名称 createDate:thisdata.createDate,//下单时间 depName:thisdata.depName,//部门名称 }); }; this.state.pagination.total = data.data.totalCount; }; if(data.data&&data.data.list&&!data.data.list.length){ this.state.pagination.total=0 } this.setState({ dataSource: theArr, pageNo: pageNo, pagination: this.state.pagination, selectedRowKeys:[] }); }.bind(this), }).always(function() { this.setState({ loading: false }); }.bind(this)); }, getInitialState() { return { page:1, releaseDate: [], selectedRowKeys: [], orgCodeUrl:[], departmentArr: [], paginations:false, pagination: { defaultCurrent: 1, defaultPageSize: 10, showQuickJumper: true, pageSize: 10, onChange: function(page) { this.loadData(page); }.bind(this), showTotal: function(total) { return '共' + total + '条数据'; } }, columns: [ { title: '订单编号', dataIndex: 'orderNo', key: 'orderNo' }, { title: '下单时间', dataIndex: 'createDate', key: 'createTime' },{ title: '合同签订时间', dataIndex: 'signDate', key: 'signDate' },{ title: '客户名称', dataIndex: 'userName', key: 'userName', render:(text)=>{ return (text&&text.length>9?text.substr(0,9)+'...':text) } }, { title: '流程状态', dataIndex: 'processStatus', key: 'processStatus', render:text=>{return getProcessStatus(text)} }, { title: '签单金额(万元)', dataIndex: 'totalAmount', key: 'totalAmount' },{ title: '结算状态', dataIndex: 'liquidationStatus', key: 'liquidationStatus', render:text=>{return getLiquidationStatus(text)} }, { title: '是否特批', dataIndex: 'approval', key: 'approval', render:text=>{return getApprovedState(text)} },{ title: '订单负责人', dataIndex: 'salesmanName', key: 'salesmanName' },{ title: '财务负责人', dataIndex: 'financeName', key: 'financeName' },{ title: '订单部门', dataIndex: 'depName', key: 'depName' } ], data: [], dataSource: [], columnsX: [ { title: '业务项目名称', dataIndex: 'commodityName', key: 'commodityName' }, { title: '项目类别', dataIndex: 'cname', key: 'cname', },{ title: '项目数量', dataIndex: 'commodityQuantity', key: 'commodityQuantity' }, { title: '金额(万元)', dataIndex: 'commodityPrice', key: 'commodityPrice' }, { title: '负责人', dataIndex: 'contacts', key: 'contacts' }, { title: '负责人电话', dataIndex: 'contactsMobile', key: 'contactsMobile' }, { title: '主要项目', dataIndex: 'main', key: 'main', render:(text)=>{ return (text?'是':'否') } }, { title: '项目说明', dataIndex: 'taskComment', key: 'taskComment', render:(text)=>{ return (text&&text.length>8?text.substr(0,8)+'…':text) } } ], columnsrizhi:[ { title:'流程', dataIndex: 'processName', key: 'processName' }, { title:'操作人', dataIndex: 'adminName', key: 'adminName' },{ title:'时间', dataIndex: 'createDate', key: 'createDate' } ], dataSourceX: [], ContactsLists: [{ title: '催款科目', dataIndex: 'dunSubject', key: 'dunSubject', render: text=>{return getjiedian(text)} },{ title: '金额(万)', dataIndex: 'money', key: 'money', }, { title: '催款状态', dataIndex: 'dunStatus', key: 'dunStatus', render:text=>{return getCuikuan(text)} }, ], } }, //页面加载函数 componentWillMount() { this.departmentList(); this.loadData(); }, //整行点击 tableRowClick(record) { this.setState({ visible:true, }); this.xiangqing(record.orderNo); this.xiangmu(record.orderNo); this.jiedian(record.orderNo); }, //点击打卡项目详情 tableRowClickX(record) { console.log(record); this.setState({ jid:record.id,//项目ID kid:record.commodityId,//商品ID commodityName:record.commodityName,//金额 commodityPrice:record.commodityPrice,//金额 commodityQuantity:record.commodityQuantity,//数量 taskComment:record.taskComment,//备注 main:record.main.toString(),//是否为主要 addnextVisible:true, addState:0, }); }, //项目详情关闭 nextCancel() { this.setState({ addnextVisible: false }) }, //订单详情 xiangqing(orderNos) { $.ajax({ method: "get", dataType: "json", crossDomain: false, url: globalConfig.context +"/api/admin/newOrder/getOrderNewDetail", data: { orderNo:orderNos }, success: function(data) { if(data.error.length || data.data.list == "") { if(data.error && data.error.length) { message.warning(data.error[0].message); }; } else { let thisdata=data.data; this.setState({ orderNo: thisdata.orderNo, //订单编号 contractNo: thisdata.contractNo, //合同编号 userName: thisdata.userName, //客户名称 signDate: thisdata.signDate, //签单时间 processStatus: thisdata.processStatus, //流程状态 liquidationStatus: thisdata.liquidationStatus, //结算状态 contacts: thisdata.contacts, //企业联系人 contactMobile: thisdata.contactMobile, //联系人电话 legalPerson: thisdata.legalPerson, //法人 legalPersonTel: thisdata.legalPersonTel, //法人电话 firstAmount: thisdata.firstAmount, //签单金额 totalAmount: thisdata.totalAmount, //首付金额 approval: thisdata.approval, //特批状态 settlementAmount: thisdata.settlementAmount, //已收款项 orderRemarks: thisdata.orderRemarks, //订单留言 orgCodeUrl: thisdata.contractPictureUrl ? splitUrl( thisdata.contractPictureUrl, ",", globalConfig.avatarHost + "/upload" ) : [], //图片地址 salesmanName: thisdata.salesmanName, //营销员名称 salesmanMobile: thisdata.salesmanMobile, //营销员电话 financeName: thisdata.financeName, //财务名称 financeMobile: thisdata.financeMobile, //财务电话 outsource: thisdata.outsource == 0 ? "否" : "是" }); }; }.bind(this), }).always(function() { this.setState({ loading: false }); }.bind(this)); }, //项目列表 xiangmu(orderNos) { $.ajax({ method: "get", dataType: "json", crossDomain: false, url: globalConfig.context +"/api/admin/newOrder/getOrderTask", data: { orderNo:orderNos }, 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.length; i++) { let thisdata = data.data[i]; theArr.push({ key: i, id:thisdata.id, orderNo:thisdata.orderNo,//订单编号 commodityId:thisdata.commodityId,//项目ID commodityName:thisdata.commodityName,//项目名称 cname:thisdata.cname,//项目类别 commodityPrice:thisdata.commodityPrice,//项目价格 commodityQuantity:thisdata.commodityQuantity,//项目数量 main:thisdata.main,//是否为主要任务 taskComment:thisdata.taskComment,//任务说明 contacts:thisdata.contacts,//联系人 contactsMobile:thisdata.contactsMobile,//联系人电话 }); }; }; this.setState({ dataSourceX: theArr, }); }.bind(this), }).always(function() { this.setState({ loading: false }); }.bind(this)); }, rizhi(){ console.log(this.state.orderNo) this.setState({ loading:true }) $.ajax({ method: "get", dataType: "json", crossDomain: false, url: '/api/admin/newOrder/selectOrderLog', data: { orderNo:this.state.orderNo }, success: function (data) { let theArr = []; let thisData = data.data; if (!thisData.length) { if (data.error && data.error.length) { message.warning(data.error[0].message); }; thisData = {}; }else{ for(let i = 0; i < data.data.length; i++) { let thisdata = data.data[i]; theArr.push({ processName:thisdata.processName, adminName:thisdata.adminName, createDate:thisdata.createDate, }); }; }; this.setState({ dataSourcerizhi: theArr }) }.bind(this), }).always(function () { this.setState({ loading: false }); }.bind(this)); }, //查看订单日志 getOrderLog(){ this.setState({ rizhivisible:true }) this.rizhi() }, closeOrderLog(){ this.setState({ rizhivisible:false }) }, //节点列表 jiedian(orderNos) { $.ajax({ method: "get", dataType: "json", crossDomain: false, url: globalConfig.context +"/api/admin/newOrder/selectOrderDun", data: { orderNo:orderNos }, success: function(data) { let theArr = []; let thisData=[]; 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.length; i++) { thisData= data.data[i]; theArr.push({ key:i, dunSubject:thisData.dunSubject?thisData.dunSubject.toString():"",//催款科目 id:thisData.id,//节点Id money:thisData.money,//催款金额 dunStatus:thisData.dunStatus,//催款状态 }) } this.setState({ contactList:theArr }) }; }.bind(this), }).always(function() { this.setState({ loading: false }); }.bind(this)); }, //审核通过 examOk(){ if (this.state.flagE) return; this.setState({ flagE: true }); $.ajax({ method: "post", dataType: "json", crossDomain: false, url: globalConfig.context +"/api/admin/newOrder/approvalOrder", data: { orderNo:this.state.orderNo, confirm:2, }, success: function(data) { if(data.error.length || data.data.list == "") { if(data.error && data.error.length) { message.warning(data.error[0].message); this.setState({ flagE: false }); }; } else { message.success("该特批订单已通过审核~"); this.setState({ visible:false, }); this.reset(); this.setState({ flagE: false }); }; }.bind(this), }).always(function() { this.setState({ loading: false }); }.bind(this)); }, //审核不通过 examOks(){ if(this.state.flagE) return this.setState({ flagE: true }) $.ajax({ method: "post", dataType: "json", crossDomain: false, url: globalConfig.context +"/api/admin/newOrder/approvalOrder", data: { orderNo:this.state.orderNo, confirm:3, reason:this.state.reason, }, success: function(data) { if(data.error.length || data.data.list == "") { if(data.error && data.error.length) { message.warning(data.error[0].message); this.setState({ flagE: false }); }; } else { message.success("该特批订单已被驳回~"); this.setState({ visible:false, noVisible:false, }); this.loadData(); this.resets(); this.setState({ flagE: false }); }; }.bind(this), }).always(function() { this.setState({ loading: false }); }.bind(this)); }, //点击拒绝 examNo(){ this.setState({ noVisible:true }) }, //关闭输入理由框 noCancel(){ this.setState({ noVisible:false }) }, //搜索 search() { this.setState({ //signBillVisible:false }) this.loadData(); }, //重置 reset() { this.setState({ signBillVisible:false }) this.state.orderNo=''; this.state.customerName=''; this.state.departmenttSearch=undefined; this.state.releaseDate[0] = undefined; this.state.releaseDate[1] = undefined; this.state.approval= undefined; this.loadData(); }, resets(){ this.state.orderNo=''; this.state.customerName=''; this.state.departmenttSearch=undefined; this.state.releaseDate[0] = undefined; this.state.releaseDate[1] = undefined; }, getOrgCodeUrl(e) { this.setState({ orgCodeUrl: e }); }, //关闭详情 visitCancel(){ this.setState({ visible:false }) this.resets(); }, visitOk(){ this.setState({ visible:false }) this.resets(); }, //部门 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)); }, render() { const formItemLayout = { labelCol: { span: 8 }, wrapperCol: { span: 14 }, }; const FormItem = Form.Item; const { RangePicker } = DatePicker; const rowSelection = { selectedRowKeys: this.state.selectedRowKeys, onChange: (selectedRowKeys, selectedRows) => { this.setState({ modalVisible:false, selectedRows: selectedRows.slice(-1), selectedRowKeys: selectedRowKeys.slice(-1) }); }, onSelect: (recordt) => { this.setState({ modalVisible:false, recordt: recordt.id }) }, }; let departmentArr = this.state.departmentArr || []; return ( <div className="user-content"> <ShowModalDiv ShowModal={this.state.showModal} /> <div className="content-title"> <span>特批订单审核</span> </div> <div className="user-search"> <Input placeholder="客户名称" style={{ width: "150px", marginBottom: "10px" }} value={this.state.customerName} onChange={e => { this.setState({ customerName: e.target.value }); }} /> <Input placeholder="订单编号" style={{ width: "150px" }} value={this.state.orderNo} onChange={e => { this.setState({ orderNo: e.target.value }); }} /> <Select placeholder="选择部门" style={{ width: 150, marginRight: "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> <span style={{ marginRight: "10px" }}>下单时间 :</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" }} > 搜索 </Button> <Button onClick={this.reset}>重置</Button> <div className="patent-table"> <Spin spinning={this.state.loading}> <Table columns={this.state.columns} dataSource={this.state.dataSource} rowSelection={rowSelection} pagination={this.state.pagination} onRowClick={this.tableRowClick} /> </Spin> </div> <Modal className="customeDetails" footer="" title="订单详情" width="900px" visible={this.state.visible} onOk={this.visitOk} onCancel={this.visitCancel} > <Form layout="horizontal" onSubmit={this.handleSubmit} id="demand-form" style={{ paddingBottom: "40px" }} > <Spin spinning={this.state.loading}> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label="订单编号" > <span>{this.state.orderNo}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="合同编号" > <span>{this.state.contractNo}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="客户名称" > <span>{this.state.userName}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="合同签订时间" > <span>{this.state.signDate}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="流程状态" > <span>{getProcessStatus(this.state.processStatus)}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="结算状态" > <span> {getLiquidationStatus(this.state.liquidationStatus)} </span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="企业联系人" > <span>{this.state.contacts}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="联系人电话" > <span>{this.state.contactMobile}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="企业法人" > <span>{this.state.legalPerson}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="法人电话" > <span>{this.state.legalPersonTel}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="签单金额(万元)" > <span>{this.state.totalAmount}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="首付金额(万元)" > <span>{this.state.firstAmount}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="特批立项" > <span>{getApprovedState(this.state.approval)}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="已收款项(万元)" > <span>{this.state.settlementAmount}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="是否外包" > <span>{this.state.outsource}</span> </FormItem> <div className="clearfix"> <FormItem labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label="订单留言" > <span>{this.state.orderRemarks}</span> </FormItem> </div> <div className="clearfix"> <FormItem labelCol={{ span: 4 }} wrapperCol={{ span: 18 }} label={ <span> <strong style={{ color: "#f00" }}>*</strong>合同扫描件 </span> } > <PicturesWall fileList={this.getOrgCodeUrl} pictureUrl={this.state.orgCodeUrl} /> <p>图片建议:要清晰。</p> <Button style={{ float: "right", marginRight: "140px", marginTop: "20px" }} onClick={this.getOrderLog} > 查看订单 日志 </Button> </FormItem> </div> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label="订单负责人" > <span>{this.state.salesmanName}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="订单负责人电话" > <span>{this.state.salesmanMobile}</span> </FormItem> </div> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label="财务负责人" > <span>{this.state.financeName}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="财务负责人电话" > <span>{this.state.financeMobile}</span> </FormItem> </div> <div> <span style={{ marginLeft: "50px", fontSize: "20px" }}> 催款节点 </span> {this.state.processStatus == 0 ? ( <Button type="primary" onClick={this.addcontact} style={{ float: "right", marginRight: "50px", marginBottom: "15px" }} > 添加催款节点 </Button> ) : ( "" )} </div> <div className="clearfix"> <Spin spinning={this.state.loading}> <Form layout="horizontal" id="demand-form"> <Table pagination={false} columns={this.state.ContactsLists} dataSource={this.state.contactList} /> <Col span={24} offset={9} style={{ marginTop: "15px" }} ></Col> </Form> </Spin> </div> <div> <span style={{ marginLeft: "50px", fontSize: "20px" }}> 项目业务 </span> {this.state.processStatus == 0 ? ( <Button type="primary" onClick={this.addDetailed} style={{ float: "right", marginRight: "50px", marginBottom: "15px" }} > 添加项目明细 </Button> ) : ( "" )} </div> <div className="patent-table"> <Spin spinning={this.state.loading}> <Table columns={this.state.columnsX} dataSource={this.state.dataSourceX} pagination={this.state.paginations} onRowClick={this.tableRowClickX} /> </Spin> </div> <div className="addSave" style={{ marginTop: "15px" }}> <Button className="cancel" type="primary" onClick={this.examOk} style={{ marginLeft: "200px" }} htmlType="submit" > 通过 </Button> <Button className="cancel" type="primary" onClick={this.examNo} style={{ marginLeft: "50px" }} htmlType="submit" > 驳回 </Button> <Button className="cancel" type="ghost" onClick={this.visitCancel} style={{ marginLeft: "50px" }} > 取消 </Button> </div> </div> </Spin> </Form> </Modal> <Modal maskClosable={false} visible={this.state.addnextVisible} onOk={this.nextCancel} onCancel={this.nextCancel} width="800px" title={"项目任务详情"} footer="" className="admin-desc-content" > <Form layout="horizontal" id="demand-form"> <Spin spinning={this.state.loading}> <div className="clearfix"> <FormItem className="half-item" {...formItemLayout} label="项目名称" > <span>{this.state.commodityName}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="项目数量" > <span>{this.state.commodityQuantity}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="金额(万元)" > <span>{this.state.commodityPrice}</span> </FormItem> <FormItem className="half-item" {...formItemLayout} label="主要项目" > <span>{getboutique(this.state.main)}</span> </FormItem> <div className="clearfix"> <FormItem labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label="服务说明" > <span>{this.state.taskComment}</span> </FormItem> </div> </div> </Spin> </Form> </Modal> <Modal maskClosable={false} visible={this.state.noVisible} onOk={this.noCancel} onCancel={this.noCancel} width="400px" title={"拒绝理由"} footer="" className="admin-desc-content" > <Form layout="horizontal" id="demand-form"> <Spin spinning={this.state.loading}> <div className="clearfix"> <FormItem labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label="拒绝理由" > <Input type="textarea" placeholder="请输入拒绝理由" rows={4} value={this.state.reason} onChange={e => { this.setState({ reason: e.target.value }); }} /> </FormItem> </div> <div className="clearfix"> <Button className="cancel" type="primary" onClick={this.examOks} style={{ marginLeft: "50px" }} htmlType="submit" > 确定 </Button> <Button className="cancel" type="ghost" onClick={this.noCancel} style={{ marginLeft: "50px" }} > 取消 </Button> </div> </Spin> </Form> </Modal> <Modal visible={this.state.rizhivisible} className="admin-desc-content" width="800px" maskClosable={false} title="订单日志" footer={null} onCancel={this.closeOrderLog} > <div className="patent-table"> <Spin spinning={this.state.loading}> <Table columns={this.state.columnsrizhi} dataSource={this.state.dataSourcerizhi} pagination={false} /> </Spin> </div> </Modal> </div> </div> ); } })); export default IntentionCustomer;