dengzhiguo 7 years ago
parent
commit
6754a8f91d
62 changed files with 9663 additions and 99 deletions
  1. 30 0
      js/component/dataDic.js
  2. 392 0
      js/component/manageCenter/customer/NEW/intentionCustomer/addIntention.jsx
  3. 477 0
      js/component/manageCenter/customer/NEW/intentionCustomer/followDetail.jsx
  4. 165 0
      js/component/manageCenter/customer/NEW/intentionCustomer/followDetail/addContact.jsx
  5. 162 0
      js/component/manageCenter/customer/NEW/intentionCustomer/followDetail/businessName.jsx
  6. 576 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionCustomer.jsx
  7. 207 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/account.jsx
  8. 506 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/basic.jsx
  9. 555 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/basicPerson.jsx
  10. 166 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/businFollow.jsx
  11. 153 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/business.jsx
  12. 312 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/businessDetail.jsx
  13. 274 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/contactPerson.jsx
  14. 198 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/visit.jsx
  15. 400 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/visitDetail.jsx
  16. 228 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/intentionDetail.jsx
  17. 235 0
      js/component/manageCenter/customer/NEW/publicCustomer/publicCustomer.jsx
  18. 7 0
      js/component/manageCenter/customer/NEW/publicCustomer/publicCustomer.less
  19. 104 0
      js/component/manageCenter/customer/NEW/query/detail.jsx
  20. 214 0
      js/component/manageCenter/customer/NEW/query/queryCutomer.jsx
  21. 404 0
      js/component/manageCenter/customer/NEW/signCustomer/followDetail.jsx
  22. 165 0
      js/component/manageCenter/customer/NEW/signCustomer/followDetail/addContact.jsx
  23. 136 0
      js/component/manageCenter/customer/NEW/signCustomer/followDetail/businessName.jsx
  24. 209 0
      js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/account.jsx
  25. 507 0
      js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/basic.jsx
  26. 555 0
      js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/basicPerson.jsx
  27. 166 0
      js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/businFollow.jsx
  28. 149 0
      js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/business.jsx
  29. 312 0
      js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/businessDetail.jsx
  30. 275 0
      js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/contactPerson.jsx
  31. 197 0
      js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/visit.jsx
  32. 331 0
      js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/visitDetail.jsx
  33. 228 0
      js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/intentionDetail.jsx
  34. 470 0
      js/component/manageCenter/customer/NEW/signCustomer/signCustomer.jsx
  35. 148 41
      js/component/manageCenter/customer/content.jsx
  36. 1 1
      js/component/manageCenter/customer/customerData/companyCustomer.jsx
  37. 1 2
      js/component/manageCenter/customer/customerData/myClient.jsx
  38. 1 1
      js/component/manageCenter/customer/customerManagement/expertManage.jsx
  39. 1 1
      js/component/manageCenter/customer/customerManagement/organizationManages.jsx
  40. 1 1
      js/component/manageCenter/customer/customerManagement/personalManages.jsx
  41. 1 1
      js/component/manageCenter/customer/customerManagement/publicManages.jsx
  42. 1 1
      js/component/manageCenter/customer/customerService/businessManges.jsx
  43. 1 1
      js/component/manageCenter/customer/customerService/myBusiness.jsx
  44. 1 1
      js/component/manageCenter/customer/customerService/serviceQuery.jsx
  45. 2 2
      js/component/manageCenter/customer/individualCustomer/expertQuery.jsx
  46. 1 1
      js/component/manageCenter/customer/individualCustomer/individualCustomer.jsx
  47. 0 0
      js/component/manageCenter/customer/individualCustomer/intentionCustomer/personalIntention.jsx
  48. 1 1
      js/component/manageCenter/customer/individualCustomer/myReject.jsx
  49. 1 1
      js/component/manageCenter/customer/individualCustomer/myRejectOne.jsx
  50. 1 1
      js/component/manageCenter/customer/individualCustomer/publicQuery.jsx
  51. 1 1
      js/component/manageCenter/customer/individualCustomer/publicQueryOne.jsx
  52. 1 1
      js/component/manageCenter/customer/individualCustomer/queryCustomer.jsx
  53. 1 1
      js/component/manageCenter/customer/release/expertRelease.jsx
  54. 4 0
      js/component/manageCenter/customer/release/releaseExpert.jsx
  55. 1 1
      js/component/manageCenter/customer/reviewed/expertReview.jsx
  56. 1 1
      js/component/manageCenter/customer/reviewed/identityAuditsOne.jsx
  57. 1 32
      js/component/manageCenter/leftTab.less
  58. 14 3
      js/component/manageCenter/order/myOrder/servicesOrder/addService.jsx
  59. 1 1
      js/component/manageCenter/order/userMangagement.less
  60. 4 0
      js/component/manageCenter/servicesManage/projectOrder/myTask/projectManage.jsx
  61. 4 0
      js/component/manageCenter/servicesManage/projectOrder/taskManagement/projectManage.jsx
  62. 2 1
      webpack.config.js

+ 30 - 0
js/component/dataDic.js

@@ -2132,4 +2132,34 @@ module.exports = {
 	        key: "全部分派"
 	    }
     ],
+    /*我的客户*/
+   //客户来源
+   customerSource:[
+    	{
+	        value: "0",
+	        key: "搜索引擎"
+	    },{
+	        value: "1",
+	        key: "广告"
+	    }, {
+	        value: "2",
+	        key: "社交推广"
+	    },{
+	        value: "3",
+	        key: "研讨会"
+	    },{
+	        value: "4",
+	        key: "客户介绍"
+	    }, {
+	        value: "5",
+	        key: "独立开发"
+	    },{
+	        value: "6",
+	        key: "代理商"
+	    }, {
+	        value: "7",
+	        key: "其他"
+	    }
+    ],
+    
 };

+ 392 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/addIntention.jsx

@@ -0,0 +1,392 @@
+import React from 'react';
+import { Icon,  Modal, message,  Spin, Input, Select, Button, Form ,Col} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {socialAttribute,customerSource} from '@/dataDic.js';
+const AchievementDetailForm = Form.create()(React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            data: {},  
+            detailApi:''
+        };
+    },
+    handleSubmit(e) {
+    	e.preventDefault();
+        this.props.form.validateFields((err, values) => {   
+        	if(values.name.length>64){
+    		message.warning('客户名称字数不超过64个')
+    		return false;
+	    	};
+	    	if(values.content.length>32){
+	    		message.warning('联系人字数不超过32个')
+	    		return false;
+	    	};
+	    	if(values.length>13){
+	    		message.warning('电话号码字数不超过13个')
+	    		return false;
+	    	};
+            if (!err) {
+                this.setState({
+                    loading: true
+                });
+                $.ajax({
+                    method: "POST",
+                    dataType: "json",
+                    crossDomain: false,
+                    url: globalConfig.context + '/api/admin/customer/addCustomer',
+                    data: {
+                        name: values.name, 
+                        contacts:values.content,
+                        contactMobile:values.telnum,
+                        societyTag:values.societyTagt,
+                        source:values.customerSource,
+                        type:'1'
+                    }
+                }).done(function (data) { 
+                    this.setState({
+                        loading: false
+                    });
+                    if (!data.error.length) {
+                        message.success('保存成功!');
+                        this.props.handleOk();
+                    } else {
+                        message.warning(data.error[0].message);
+                    }
+                }.bind(this));
+            }
+        });
+    },
+    componentWillMount() {
+        this.state.name='';
+    	this.state.content='';
+    	this.state.telnum='';
+    	this.state.societyTagt=undefined;
+    	this.state.customerSource='0'
+    },
+    componentWillReceiveProps(nextProps) {
+        if (!this.props.visible && nextProps.visible) {
+            this.state.name='';
+	    	this.state.content='';
+	    	this.state.telnum='';
+	    	this.state.societyTagt=undefined;
+            this.props.form.resetFields(); 
+        };
+    },
+    
+    render() {
+        const theData = this.state.data || {};
+        const { getFieldDecorator } = this.props.form;
+        const FormItem = Form.Item
+        const formItemLayout = {
+            labelCol: { span: 6 },
+            wrapperCol: { span: 14 },
+        };  
+
+        return (
+        <div>
+            <Form layout="horizontal" onSubmit={this.handleSubmit} id="demand-form">
+                <Spin spinning={this.state.loading}>
+                	<div>
+               	    	<Col style={{color:'red',marginBottom:'10px'}} span={12} offset={6}>注:请录入真实有效的客户信息</Col>
+	                    <div className="clearfix">
+	                    	<FormItem className="mid-item"
+		                            {...formItemLayout}
+		                            label="公司名称" >
+	                    	     {getFieldDecorator('name', {
+	                                rules: [{ required: true, message: '此项为必填项!' }],
+	                                initialValue: this.state.name
+	                            })(
+	                                <Input placeholder="公司名称" />
+	                                )}
+		                    </FormItem>
+	                    </div>
+	                    <div className="clearfix">
+	                    	<FormItem className="mid-item"
+		                            {...formItemLayout}
+		                            label="联系人" >
+		                            {getFieldDecorator('content', {
+		                                rules: [{ required: true, message: '此项为必填项!' }],
+		                                initialValue: this.state.content
+	                                })(
+	                                    <Input placeholder="联系人" />
+	                                )}     
+		                    </FormItem>
+	                    </div>
+	                    <div className="clearfix">
+	                    	<FormItem className="mid-item"
+		                            {...formItemLayout}
+		                            label="联系电话" >
+		                            {getFieldDecorator('telnum', {
+		                                rules: [{ required: true, message: '此项为必填项!' }],
+		                                initialValue: this.state.telnum
+	                                })(
+	                               		<Input placeholder="联系电话" />
+	                                )}        
+		                    </FormItem>
+	                    </div>
+	                    <div className="clearfix">
+	                    	<FormItem className="mid-item" 
+	                          {...formItemLayout}
+	                           label="社会属性"
+	                         > 
+	                         {getFieldDecorator('societyTagt', {
+		                                rules: [{ required: true, message: '此项为必填项!' }],
+		                                initialValue: this.state.societyTagt
+	                                })(
+								  <Select placeholder="客户社会属性"> 
+	                                {
+	                                    socialAttribute.map(function (item) {
+	                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+	                                    })
+	                                }
+	                              </Select>
+	                            )}
+	                   		 </FormItem>
+	                    </div>
+	                    <div className="clearfix">
+	                    	<FormItem className="mid-item" 
+	                          {...formItemLayout}
+	                           label="客户来源"
+	                         > 
+	                         {getFieldDecorator('customerSource', {
+		                                rules: [{ required: true, message: '此项为必填项!' }],
+		                                initialValue: this.state.customerSource
+	                                })(
+								  <Select placeholder="客户来源"> 
+	                                {
+	                                    customerSource.map(function (item) {
+	                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+	                                    })
+	                                }
+	                              </Select>
+	                            )}
+	                   		 </FormItem>
+	                    </div>
+	                </div> 
+                    <FormItem wrapperCol={{ span: 12, offset: 6 }}>
+                        <Button type="primary" htmlType="submit" style={{marginRight:'50px'}}>保存</Button>  
+                        <Button type="ghost" onClick={this.props.closeDesc}>取消</Button>
+                    </FormItem> 
+                </Spin>
+            </Form >
+    	</div>
+        )
+    }
+}));
+
+const AddPerson = Form.create()(React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            data: {},  
+            detailApi:''
+        };
+    },
+
+    handleSubmit(e) {
+    	e.preventDefault();
+        this.props.form.validateFields((err, values) => { 
+        	if(values.companyNamet.length>64){
+    		message.warning('联系人字数不超过64个')
+    		return false;
+	    	};
+	    	if(values.telnums.length>13){
+	    		message.warning('电话号码字数不超过13个')
+	    		return false;
+	    	};
+            if (!err) {
+                this.setState({
+                    loading: true
+                });
+                $.ajax({
+                    method: "POST",
+                    dataType: "json",
+                    crossDomain: false,
+                    url: globalConfig.context + '/api/admin/customer/addCustomer',
+                    data: {
+                        contacts:values.companyNamet,
+                        societyTag:values.societyTagt,
+                        name: values.companyNamet, 
+                        contactMobile: values.telnums,
+                        source:values.customerSource,
+                        type:'0'
+                    }
+                }).done(function (data) { 
+                    this.setState({
+                        loading: false
+                    });
+                    if (!data.error.length) {
+                        message.success('保存成功!');
+                        this.props.handleOk();
+                    } else {
+                        message.warning(data.error[0].message);
+                    }
+                }.bind(this));
+            }
+        });
+    },
+    componentWillMount() {
+        this.state.companyNamet='';
+    	this.state.telnum='';
+    	this.state.societyTagt=undefined;
+    	this.state.customerSource='0';
+    },
+    componentWillReceiveProps(nextProps) {
+        if (!this.props.visible && nextProps.visible) {
+            this.state.companyNamet='';
+	    	this.state.telnum='';
+	    	this.state.societyTagt=undefined;
+	    	this.state.customerSource='0';
+            this.props.form.resetFields(); 
+        };
+    },
+    
+    render() {
+        const theData = this.state.data || {};
+        const { getFieldDecorator } = this.props.form;
+        const FormItem = Form.Item
+        const formItemLayout = {
+            labelCol: { span: 6 },
+            wrapperCol: { span: 14 },
+        };  
+
+        return (
+        <div>
+            <Form layout="horizontal" onSubmit={this.handleSubmit} id="demand-form">
+                <Spin spinning={this.state.loading}>
+               	    <Col style={{color:'red',marginBottom:'10px'}} span={12} offset={6}>注:请录入真实有效的客户信息</Col>
+	                <div className="clearfix">
+                    	<FormItem className="mid-item"
+	                            {...formItemLayout}
+	                            label="客户姓名" >   
+	                           {getFieldDecorator('companyNamet', {
+	                                rules: [{ required: true, message: '此项为必填项!' }],
+	                                initialValue: this.state.companyNamet
+                                })(
+                                    <Input placeholder="客户姓名" />
+                                )} 
+	                    </FormItem>
+	                </div>
+	                <div className="clearfix">
+                    	<FormItem className="mid-item"
+	                            {...formItemLayout}
+	                            label="联系电话" >
+	                    		{getFieldDecorator('telnums', {
+	                                rules: [{ required: true, message: '此项为必填项!' }],
+	                                initialValue: this.state.telnums
+                                })(
+                                    <Input placeholder="联系电话" />
+                                )} 
+	                    </FormItem>
+                    </div>
+                    <div className="clearfix">
+                    	<FormItem className="mid-item" 
+                          {...formItemLayout}
+                           label="社会属性"
+                         > 
+                         {getFieldDecorator('societyTagt', {
+	                                rules: [{ required: true, message: '此项为必填项!' }],
+	                                initialValue: this.state.societyTagt
+                                })(
+							  <Select placeholder="客户社会属性"> 
+                                {
+                                    socialAttribute.map(function (item) {
+                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                }
+                              </Select>
+                            )}
+                   		 </FormItem>
+                    </div>
+                    <div className="clearfix">
+                    	<FormItem className="mid-item" 
+                          {...formItemLayout}
+                           label="客户来源"
+                         > 
+                         {getFieldDecorator('customerSource', {
+	                                rules: [{ required: true, message: '此项为必填项!' }],
+	                                initialValue: this.state.customerSource
+                                })(
+							  <Select placeholder="客户来源"> 
+                                {
+                                    customerSource.map(function (item) {
+                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                }
+                              </Select>
+                            )}
+                   		 </FormItem>
+	                </div>
+                    <FormItem wrapperCol={{ span: 12, offset: 6 }}>
+                        <Button style={{marginRight:'50px'}} type="primary" htmlType="submit">保存</Button>  
+                        <Button  type="ghost" onClick={this.props.closeDesc}>取消</Button>
+                    </FormItem> 
+                </Spin>
+            </Form >
+    	</div>
+        )
+    }
+}));
+
+const AddIntention = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            tabsKey: 1,
+            loading: false,           
+            dataSource: [],
+        };
+    },    
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    handleOk(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false, true);
+    },
+    
+    componentWillReceiveProps(nextProps) {
+        if (!this.state.visible && nextProps.showDesc) {
+            this.state.tabsKey = "1";
+        };
+        this.state.visible = nextProps.showDesc; 
+        
+    },
+    render() {
+        
+            return (
+                <div className="patent-desc">
+                    <Modal maskClosable={false} visible={this.state.visible}
+                        onOk={this.checkPatentProcess} onCancel={this.handleCancel}
+                        width='600px'
+                        title='新建客户'                       
+                        footer=''
+                        className="admin-desc-content">
+                        <Spin spinning={this.state.loading}>               
+                            {this.props.api.indexOf('Personal')<0?<AchievementDetailForm
+                                data={this.props.data} 
+                                newmodal={this.props.newmodal}
+                                closeDesc={this.handleCancel}
+                                visible={this.state.visible}
+                                handleOk={this.handleOk} />:<AddPerson 
+                                	data={this.props.data} 
+	                                newmodal={this.props.newmodal}
+	                                closeDesc={this.handleCancel}
+	                                visible={this.state.visible}
+	                                handleOk={this.handleOk}
+                                />}
+                        </Spin>
+                    </Modal>
+                </div>
+            );        
+    },
+});
+
+
+export default AddIntention;

+ 477 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/followDetail.jsx

@@ -0,0 +1,477 @@
+import React from 'react'
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {Modal,Form,layout,Radio,Button,Input,Spin,Table,Select,Popconfirm,message} from 'antd';
+import {intentionalService,newFollow,customerStatus} from '@/dataDic.js';
+import {getCompanyIntention} from '@/tools.js';
+const FormItem =Form.Item;
+import AddContact from './followDetail/addContact.jsx';
+import BusName from './followDetail/businessName.jsx';
+
+const FollowDetail = React.createClass({
+	getInitialState(){
+		return{
+			visitModul:false,
+			loading:false,
+			data:[],
+			businessName:'',
+			projectName:'',
+			busModul:false,
+			intentionList:[{
+					title: '业务名称',
+					dataIndex: 'businessGlossoryId',
+					width:120,
+					key: 'businessGlossoryId',
+					render: (text, record, index) => {
+						return (
+							<div>
+								{!record.id?<Select  placeholder="选择业务名称"  value={record.businessGlossoryId}  onChange={(e) => { record.businessGlossoryId = e; this.setState({ data: this.state.data }); }}>
+                                    {
+                                        this.props.categoryArr.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                    }
+                               </Select>:
+                               <span>{record.businessVarietiesName}</span>}
+							</div>
+						)
+					}
+				},
+				{
+					title: '项目名称',
+					dataIndex: 'businessName',
+					key:'businessName',
+					width:120,
+					render:(text,record,index)=>{
+						return(
+							<div>
+								{!record.id?<div>
+									<Button onClick={(e)=>{e.stopPropagation(),this.businessFn(record,index)}} type="small">{record.projectName}</Button>
+								</div>:
+								<span>{record.businessProjectName}</span>
+								}
+							</div>
+							)
+						}
+				},
+				{
+					title: '最新进度',
+					width:120,
+					dataIndex: 'followSituation',
+					key: 'followSituation',
+					render: (text, record, index) => {
+						return <Select  placeholder="选择最新进度" value={record.followSituation}  onChange={(e) => { record.followSituation = e; this.setState({ data: this.state.data }); }}>
+                                    {
+                                        newFollow.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                    }
+                               </Select>
+					}
+				}, {
+					title: '最新状态',
+					width:120,
+					dataIndex: 'customerStatus',
+					key: 'customerStatus',
+					render: (text, record, index) => {
+						return <Select value={record.customerStatus} placeholder="选择最新状态" onChange={(e) => { record.customerStatus = e; this.setState({ data: this.state.data }); }}>
+                                    {
+                                        customerStatus.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                    }
+                               </Select>
+					}
+				}, {
+					title: '跟进说明',
+					width:120,
+					dataIndex: 'remarks',
+					key: 'remarks',
+					render: (text, record, index) => {
+						return <Input value={record.remarks} placeholder="跟进说明" 
+	                             onChange={(e) => { record.remarks = e.target.value; this.setState({ data: this.state.data }); }}
+	                             />
+					}
+				}, {
+					title: '操作',
+					width:120,
+					dataIndex: 'rrr',
+					key: 'rrr',
+					render: (text, record, index) => {
+						return <div>
+                          {!record.id&&<Popconfirm title="是否删除?" onConfirm={(e)=>{this.intentionDelet(record,index)}} okText="删除" cancelText="不删除">
+							    <Button style={{marginRight:'10px',color:'#ffffff',background:'#f00',border:'none'}}>删除</Button>
+							</Popconfirm>}
+                        </div>
+					}
+				}
+			],
+		}
+	},
+	//选择子项目
+	businessFn(record,index){
+		if(!record.businessGlossoryId){
+			message.warn('请先选择业务名称!');
+			return;
+		}
+		this.setState({
+			businessId:record.businessGlossoryId,
+			busModul:true,
+			index:index,
+			addcontactModul:false
+		})
+	},
+	closeBus(datas,e,s){
+		this.state.addcontactModul=e;
+		this.state.busModul=false;
+		if(s){
+			this.state.data[this.state.index].businessName=datas.id;
+			this.state.data[this.state.index].projectName=datas.name;
+			this.setState({
+				busModul:false,
+				data:this.state.data
+			})
+		}
+	},
+	//拜访意向服务列表单个删除
+	intentionDelet(e, index) {
+		let deteluserBusinessList = (this.state.data).splice(index, 1)
+		this.setState({
+			selectedRowKeys: [],
+		});
+	},
+	//拜访modul函数
+	visitOk(e) {
+		this.setState({
+			addcontactModul:false,
+			visitModul: false
+		});
+	},
+	visitCancel(e) {
+		this.setState({
+			addcontactModul:false,
+			visitModul: false
+		});
+	},
+	//获取联系人下拉框
+	getNewWoman(ids) {
+		this.state.data = []
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/findCustomerContacts",
+			data: {
+				uid: ids,
+			},
+			success: function(data) {
+				let theArr = [];
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				var telNum = [];
+				var contactIds = [];
+				thedata.map(function(item, index) {
+					contactIds.push(thedata[index].id);
+					telNum.push(thedata[index].mobile);
+				});
+				for(let item in data.data) {
+					let theData = data.data[item];
+					theArr.push(
+						<Select.Option value={item} key={theData.name}>{theData.name}</Select.Option>
+					);
+				};
+				this.setState({
+					contactsIdArr: thedata,
+					telNum: telNum,
+					orderStatusOption: theArr,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				deletId: ids,
+				loading: false
+			});
+		}.bind(this));
+	},
+	//刷新新增拜访记录刷新
+	deletelist(e) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/toAddFollow',
+			data: {
+				uid: e,
+			},
+			success: function(data) {
+				let listArr = [];
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				for(let i = 0; i < data.data.userBusinessList.length; i++) {
+					let thisdata = data.data.userBusinessList[i];
+					listArr.push({
+						id: thisdata.businessId,
+						businessName:thisdata.businessProjectId,
+						businessGlossoryId:i,
+						businessVarietiesName:thisdata.businessVarietiesName,
+						businessProjectName:thisdata.businessProjectName,
+						followSituation: String(thisdata.followSituation),
+						customerStatus: String(thisdata.customerStatus),
+						remarks: thisdata.remarks,
+					});
+				};
+				this.setState({
+					contacts: thedata.contacts,
+					uid: thedata.uid,
+					data: listArr,
+					followTime: thedata.followTime,
+					remarks: thedata.remarks,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//当选择联系人的列表变化时,则执行
+	hundleName(e) {
+		let changNub = this.state.telNum[e];
+		this.setState({
+			nub: this.state.telNum[e],
+			lastName: e,
+		});
+	},
+	//点击添加联系人
+	newContacts() {
+		this.setState({
+			busModul:false,
+			uids: this.state.uid,
+			addcontactModul: true
+		});
+	},
+	//页面刷新
+	closeFollow(e, s) {
+		this.state.addcontactModul=false;
+		this.state.visitModul = true;
+		if(s) {
+			this.getNewWoman(this.props.followData.id);
+			this.deletelist(this.props.followData.id)
+		};
+	},
+	//详情保存
+	visitSubmit(e){
+		e.preventDefault();
+		let GlossoryId=false;
+		this.state.data.map(function(item) {
+			if(!item.followSituation||!item.customerStatus||!item.businessName) {
+				GlossoryId = true
+			}
+		})
+		if(this.state.contactType == undefined) {
+			message.warning('请选择拜访方式')
+			return false;
+		};
+		if(this.state.lastName == undefined) {
+			message.warning('请选择联系人')
+			return false;
+		}
+		if(GlossoryId) {
+			message.warning("项目名称/最新进度/最新状态不能为空!")
+			return false;
+		};
+		let dataList=this.state.data,
+			idsList=[];
+		dataList.map((item,index) => {
+			idsList.push({
+				businessId:item.id||'',
+				businessProjectId:item.businessName,
+				customerStatus:item.customerStatus,
+				followSituation:item.followSituation,
+				remarks:item.remarks||''
+			})
+		})
+		this.setState({
+			loading: true
+		});
+		let contactsId = '';
+		let conts = this.state.lastName;
+		contactsId = this.state.contactsIdArr[conts].id;
+		//新增
+		
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url:  globalConfig.context + '/api/admin/customer/addFollow',
+			data: {
+				userBusinessList: JSON.stringify(idsList),
+				uid: this.state.uid,
+				ocbId: contactsId,
+				contactType: this.state.contactType,
+				result: this.state.result,
+				followTime: this.state.followTime,
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDesc(false,true)
+				this.visitCancel();
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+	},
+	//添加新业务
+	addNew(){
+		this.state.data.push({
+			projectName:'选择',
+			businessName:'',
+			customerStatus: undefined,
+			businessGlossoryId: undefined,
+			followSituation: undefined,
+			remarks: '',
+		});
+		this.setState({
+			addcontactModul:false,
+			data: this.state.data
+		})
+	},
+	componentWillReceiveProps(nextProps) {
+        if (nextProps.visitModul && nextProps.followData.id) {
+            this.setState({
+				result: '',
+				contactType: undefined,
+				visitModul: true,
+				loading: true,
+				lastName:undefined,
+				nub:'',
+				busModul:false,
+				addcontactModul:false,
+			})
+			this.getNewWoman(nextProps.followData.id);
+			this.deletelist(nextProps.followData.id)
+        };
+    },
+	render() {
+		const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+		return(
+			<div>
+				<Modal	
+				      className="customeDetails"
+				      footer=''
+			          title="客户跟进详情"
+			          width='1000px'
+			          visible={this.state.visitModul}
+			          onOk={this.visitOk}
+					  onCancel={this.visitCancel}							          							          
+			        >				    
+					    <Form layout="horizontal" id="demand-form" onSubmit={this.visitSubmit}>
+			    			<Spin spinning={this.state.loading}>
+			    			   	<div className="clearfix">
+			    			   		<FormItem 
+			                            labelCol={{ span: 4 }}
+										wrapperCol={{ span: 20 }}
+			                            label="拜访方式" >
+			    			   			<Radio.Group value={this.state.contactType} onChange={(e) => {
+										        this.setState({ contactType: e.target.value }) 
+						                    }}>
+						                        <Radio value={0}>外出</Radio>
+						                        <Radio value={1}>电话</Radio>
+						                        <Radio value={2}>QQ</Radio>
+						                        <Radio value={3}>微信</Radio>
+						                        <Radio value={4}>邮箱</Radio>
+						                </Radio.Group>
+						                <span className="mandatory">*</span>
+					                </FormItem>
+					                <div className="clearfix">
+						                {this.state.contacts?<span></span>:
+							                <FormItem className="half-item"
+					                            {...formItemLayout}
+					                             label="联系人"
+					                             >
+							                	<Select placeholder="选择联系人" style={{ width: 140 }}
+							                        value={this.state.lastName}
+							                        onChange={this.hundleName}>
+							                        {this.state.orderStatusOption}
+				                    			</Select>
+				                    			<span className="mandatory">*</span>
+							                </FormItem>
+						                }
+						                <FormItem className="half-item"
+			                          		 {...formItemLayout}
+			                             	>
+					                			<Button type="primary" onClick={this.newContacts} style={{marginLeft:'100px'}}>添加新联系人</Button>
+					                	</FormItem>
+					                	<FormItem className="half-item"
+				                            {...formItemLayout}
+				                             label="联系电话"
+				                             >
+						                	<span>{this.state.nub}</span>
+						                </FormItem>
+						                <FormItem className="half-item"
+				                            {...formItemLayout}
+				                             label="跟进时间"
+				                             >
+						                	<span>{this.state.followTime}</span>
+						                </FormItem>
+					                </div>
+					                <div className="clearfix">
+					                	<FormItem
+					                        labelCol={{ span: 4 }}
+							                wrapperCol={{ span: 16 }}
+					                        label="跟进备注" >
+					                            <Input type="textarea" rows={4} value={this.state.result} 
+					                              onChange={(e)=>{this.setState({result:e.target.value})}}/>
+					                    </FormItem>
+					                </div>
+					                <div className="clearfix">
+					                 	<div style={{fontSize:'18px',marginLeft:'100px',marginTop:'15px',marginBottom:'10px'}}>业务意向<Button onClick={this.addNew} style={{marginLeft:'420px',background:'green',color:'#ffffff'}}>添加新业务</Button></div>
+					                 	<div className="clearfix" >
+		                    			    <Spin spinning={this.state.loading}>
+										      <Table 
+										         rowKey={record => record.id}
+								            	 pagination={false}
+								            	 columns={this.state.intentionList} 
+								            	 dataSource={this.state.data}
+								            	 />
+										    </Spin> 
+										</div>	 
+					                </div>
+			    			   	</div>
+			    			   	<FormItem wrapperCol={{ span: 12, offset: 6 }}>
+								    <Button  type="primary" size="large" htmlType="submit" style={{marginRight:'150px',marginTop:'20px'}}>保存</Button>
+						           	<Button  size="large" onClick={this.visitCancel}>取消</Button>
+					   			</FormItem>
+					   		</Spin>
+					    </Form>
+				</Modal> 
+				<AddContact 
+					addcontactModul={this.state.addcontactModul}
+					uids={this.state.uids}
+					closeFollow={this.closeFollow}
+				/>
+				<BusName 
+					businessId={this.state.businessId}
+					busModul={this.state.busModul}
+					closeBus={this.closeBus}
+				/>
+			</div>
+		)
+	}
+})
+export default FollowDetail;

+ 165 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/followDetail/addContact.jsx

@@ -0,0 +1,165 @@
+import React from 'react';
+import { Modal, message, layout, Spin, Input,  Button, Form, Row, Col, Radio } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+const FormItem =Form.Item;
+
+const AddContact = React.createClass({
+	getInitialState() {
+		return {
+			addcontactModul: false,
+		}
+	},
+	addcontactModulOK() {
+		this.setState({
+			addcontactModul: false
+		})
+		this.props.closeFollow(true, true)
+	},
+	addcontactModulcancel() {
+		this.setState({
+			addcontactModul: false
+		})
+		this.props.closeFollow(false, false)
+	},
+	//新增联系人保存函数
+	submitcontactman(e) {
+		e.preventDefault();
+		if(!this.state.newname){
+			message.warn('请输入姓名');
+			return ;
+		};
+		if(!this.state.newmobile){
+			message.warn('请输入手机号码');
+			return ;
+		};
+		this.setState({
+			loading: true
+		})
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/addOneContact",
+			data: {
+				uid: this.state.uid,
+				name: this.state.newname,
+				mobile: this.state.newmobile,
+				email: this.state.newemail,
+				wechat: this.state.newwechat,
+				depatrment: this.state.newdepatrment,
+				position: this.state.newposition,
+				sex: this.state.newsex,
+				qq: this.state.newqq
+			},
+			success: function(data) {
+				if(!data.error.length) {
+					this.addcontactModulOK()
+					this.setState({
+						loading: false,
+					})
+				} else {
+					message.warning(data.error[0].message);
+				};
+			}.bind(this)
+		});
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.addcontactModul && nextProps.uids) {
+			this.setState({
+				newsex: undefined,
+				newname: '',
+				newmobile: '',
+				newwechat: '',
+				newqq: '',
+				newdepatrment: '',
+				newposition: '',
+				newemail: '',
+				addcontactModul: true,
+				uid: nextProps.uids,
+				loading:false
+			})
+		};
+	},
+	render() {
+		return(
+			<div>
+				<Modal
+				      footer=''
+				      width='800px'
+			          title="新增联系人"
+			          visible={this.state.addcontactModul}
+			          onOk={this.addcontactModulOK}
+			          onCancel={this.addcontactModulcancel}						          							          
+						        >
+				        <Form layout="horizontal" onSubmit={this.submitcontactman} id="demand-form">
+					      <Spin spinning={this.state.loading}> 											             
+					        <Row>	
+			                    <FormItem 
+			                        labelCol={{ span: 3 }}
+			                        wrapperCol={{ span: 14 }}
+			                        label="性别:"  style={{marginRight:'10px',marginTop: '-15px'}}>
+			                        <Radio.Group value={this.state.newsex} onChange={(e) => {
+					                    this.setState({ newsex: e.target.value }) 
+					                    }}>
+					                        <Radio value='男'>男</Radio>
+					                        <Radio value='女'>女</Radio>
+				                    </Radio.Group>
+			                    </FormItem>	
+							</Row>								               
+					        <Row style={{ paddingLeft:'50px' }}>
+		                        <Col span={2}><span style={{color:'red'}}>*</span>姓名:</Col>
+                                <Col span={8}>
+                                    <Input value={this.state.newname}
+                                        onChange={(e) => { this.setState({ newname: e.target.value }) }} />
+                                </Col>
+                                <Col span={2} style={{ marginLeft: '50px' }}><span style={{color:'red'}}>*</span>手机:</Col>
+                                <Col span={8}>
+                                    <Input value={this.state.newmobile} 
+                                        onChange={(e) => { this.setState({ newmobile: e.target.value }) }} />
+                                </Col>
+                                
+                            </Row>
+		                    <Row style={{ marginTop: '20px',paddingLeft:'50px' }}>
+                                <Col span={2}>微信:</Col>
+                                	<Col span={8}>
+                                    <Input value={this.state.newwechat}
+                                        onChange={(e) => { this.setState({ newwechat: e.target.value }) }} />
+                                </Col>
+                                <Col span={2} style={{ marginLeft: '50px' }}>Q Q:</Col>
+                                <Col span={8}>
+                                    <Input value={this.state.newqq}
+                                        onChange={(e) => { this.setState({ newqq: e.target.value }) }} />
+                                </Col>
+                            </Row>
+                            <Row style={{ marginTop: '20px' ,paddingLeft:'50px'}}>
+                        		<Col span={2}>部门:</Col>
+                        		<Col span={8}>
+                           		 	<Input value={this.state.newdepatrment}
+                               		 onChange={(e) => { this.setState({ newdepatrment: e.target.value }) }} />
+                                </Col>
+                                <Col span={2} style={{ marginLeft: '50px' }}>职位:</Col>
+                                <Col span={8}>
+                                    <Input value={this.state.newposition}
+                                        onChange={(e) => { this.setState({ newposition: e.target.value }) }} />
+                                </Col>
+                            </Row>	
+                            <Row style={{ marginTop: '20px',paddingLeft:'50px' }}>						                       
+                                <Col span={2}>邮箱:</Col>
+                                <Col span={8}>
+                                    <Input value={this.state.newemail}
+                                        onChange={(e) => { this.setState({ newemail: e.target.value }) }} />
+                                </Col>
+                            </Row>
+                            <Row style={{ marginTop: '20px',paddingLeft:'50px' ,marginBottom:'50px'}}>
+		                          <Button className="set-submit" type="primary" htmlType="submit"  id="change_keep" style={{marginLeft:'60px'}}>保存</Button>
+					              <Button className="set-submit" type="ghost" onClick={this.addcontactModulcancel} id='change_rem'>取消</Button>
+			            	</Row>
+			            </Spin>
+			        </Form>   
+			    </Modal>
+			</div>
+		)
+	}
+})
+export default AddContact;

+ 162 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/followDetail/businessName.jsx

@@ -0,0 +1,162 @@
+import React from 'react'
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import { Radio, Form, Modal, message, layout, Spin, Button } from 'antd';
+
+const BusName = React.createClass({
+	loadData(ids) {
+		this.setState({
+			loading: true
+		})
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/ProjectSize/listProject',
+			data: {
+				pageNo: 1,
+				pageSize: 100,
+				cid: ids,
+			},
+			success: function(data) {
+				let listArr = [];
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				if(data.data&&data.data.list){
+					for(let i = 0; i < data.data.list.length; i++) {
+						let thisdata = data.data.list[i];
+						listArr.push({
+							id: thisdata.id,
+							name: thisdata.bname,
+						});
+					};
+				}
+				this.setState({
+					projectData: listArr,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	getLockedProject(ids){
+		this.setState({
+			loading:true
+		})
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/getLockedProject',
+			data:{
+				uid:ids
+			},
+			success:function(data){
+				let theData=data.data
+				if(!theData){
+					if(data.err&&data.err.length){
+						message.warning(data.error[0].message);
+					}
+				}
+				this.setState({
+					businessData:theData.businessProjectName
+				})
+			}.bind(this)
+		}).always(function(){
+			this.setState({
+				loading:false
+			})
+		}.bind(this));
+	},
+	getInitialState() {
+		return {
+			busModul: false
+		}
+	},
+	visitCancel() {
+		this.setState({
+			busModul: false
+		})
+		this.props.closeBus(null,false,false)
+	},
+	selFn() {
+		this.setState({
+			busModul: false
+		});
+		let idData={};
+		idData.id=this.state.contactType;
+		this.state.projectData.map(item=>{
+			if(this.state.contactType==item.id){
+				idData.name=item.name
+			}
+		})
+		this.props.closeBus(idData, false, true);
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.busModul) {
+			this.setState({
+				busModul: true,
+				loading: false
+			})
+			this.getLockedProject(nextProps.businessId);
+			this.loadData(nextProps.businessId);
+		};
+	},
+	render() {
+		const formItemLayout = {
+			labelCol: {
+				span: 4
+			},
+			wrapperCol: {
+				span: 18
+			},
+		};
+		const projectData = this.state.projectData ||[];
+		return(
+			<Modal	
+			      className="customeDetails"
+			      footer=''
+		          title="项目名称"
+		          width='600px'
+		          visible={this.state.busModul}
+		          onOk={this.visitCancel}
+				  onCancel={this.visitCancel}							          							          
+		        >	
+			        <Form layout="horizontal" id="demand-form" >
+		    			<Spin spinning={this.state.loading}>
+		    			   	<div className="clearfix">
+		    			   		<Form.Item 
+		                            {...formItemLayout}
+		                            label="已签单业务" >
+		    			   			<span>{this.state.businessData}</span>
+				           		</Form.Item>
+		    			   		<Form.Item 
+		                            {...formItemLayout}
+		                            label="项目名称" >
+		    			   			<Radio.Group value={this.state.contactType} onChange={(e) => {
+									        this.setState({ contactType: e.target.value }) 
+					                    }}>
+											{
+												projectData.map((item,index)=>{
+													return <Radio key={index} value={item.id}>{item.name}</Radio>
+												})
+											}
+					                </Radio.Group>
+				           		</Form.Item>
+				           		<Form.Item wrapperCol={{ span: 12, offset: 4 }}>
+		    			   			<Button onClick={this.selFn} type='primary'>选定</Button>
+		    			   			<Button onClick={this.visitCancel} style={{marginLeft:'40px'}}>取消</Button>
+				           		</Form.Item>
+				            </div>
+				        </Spin>
+					</Form>
+			</Modal>
+		)
+	}
+})
+export default BusName;

+ 576 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionCustomer.jsx

@@ -0,0 +1,576 @@
+import React from 'react';
+import { Radio, Icon, Button, AutoComplete,Cascader,Input, Select, Spin, Popconfirm, Table, Switch, message, DatePicker, Upload, Form } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import { citySelect, provinceList } from '@/NewDicProvinceList';
+import AddIntention from './addIntention.jsx';
+import { socialAttribute, industry, auditStatusL, lvl, currentMember } from '@/dataDic.js';
+import { getSocialAttribute, beforeUploadFile } from '@/tools.js';
+import FollowDetail from './followDetail.jsx'
+import IntentionDetail from './intentionDetail/intentionDetail.jsx'
+
+const IntentionCustomer = Form.create()(React.createClass({
+	loadData(pageNo, apiUrl) {
+		this.setState({
+			visitModul:false,
+			loading: true,
+			ispage:pageNo,
+			modalVisible:false
+		});
+		let api=apiUrl?apiUrl:this.props.ApiUrl;
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + api,
+			data: {
+				pageNo: pageNo || 1,
+				pageSize: this.state.pagination.pageSize,
+				name: this.state.nameSearch,
+				province: !(this.state.addressSearch).length ? this.state.provinceSearch : this.state.addressSearch[0],
+				city: !(this.state.addressSearch).length ? '' : this.state.addressSearch[1],
+				startDate: this.state.releaseDate[0],
+				endDate: this.state.releaseDate[1],
+			},
+			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.uid,
+							name: thisdata.name,
+							contacts: thisdata.contacts,
+							contactMobile: thisdata.contactMobile,
+							industry: thisdata.industry,
+							societyTag: thisdata.societyTag,
+							lastFollowTime:thisdata.lastFollowTime&&thisdata.lastFollowTime.split(' ')[0],
+							transferTime:thisdata.transferTime&&thisdata.transferTime.split(' ')[0],
+							surplusFollowTime:thisdata.surplusFollowTime&&thisdata.surplusFollowTime.split(' ')[0],
+							surplusSignTime:thisdata.surplusSignTime&&thisdata.surplusSignTime.split(' ')[0],
+							locationProvince: thisdata.province ? thisdata.province + '-' + thisdata.city + '-' + thisdata.area : '--'
+						});
+					};
+					this.state.pagination.current = data.data.pageNo;
+				    this.state.pagination.total = data.data.totalCount;
+				};
+				if(data.data&&data.data.list&&!data.data.list.length){
+					this.state.pagination.current=0
+					this.state.pagination.total=0
+				}
+				this.setState({
+					dataSource: theArr,
+					pagination: this.state.pagination,
+					selectedRowKeys:[]
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//品类数据获取
+    category(){
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/Varieties/getSuperList",
+			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({
+							value:item.id,
+							key:item.cname,
+						})
+					})
+				}
+				this.setState({
+					categoryArr:theArr,
+				})
+			}.bind(this),
+			});
+    },
+	getInitialState() {
+		return {
+			addressSearch: [],
+			orgCodeUrl: [],
+			companyLogoUrl: [],
+			visible: false,
+			searchMore: true,
+			releaseDate: [],
+			categoryArr:[],
+			visitModul:false,
+			keys:false,
+			detailApi:'',
+			followData:{},
+			selectedRowKeys: [],
+			selectedRowKey: [],
+			selectedRows: [],
+			loading: false,
+			modalVisible: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: 'name',
+					key: 'name',
+				}, {
+					title: '地区',
+					dataIndex: 'locationProvince',
+					key: 'locationProvince',
+				}, {
+					title: '联系人',
+					dataIndex: 'contacts',
+					key: 'contacts',
+				},
+				{
+					title: '联系电话',
+					dataIndex: 'contactMobile',
+					key: 'contactMobile',
+				},
+				{
+					title: '社会性质',
+					dataIndex: 'societyTag',
+					key: 'societyTag',
+					render: text => { return getSocialAttribute(text) }
+				},
+				{
+					title: '客户初始时间',
+					dataIndex: 'transferTime',
+					key: 'transferTime',
+				},
+				{
+					title: '剩余私有天数',
+					dataIndex: 'surplusFollowTime',
+					key: 'surplusFollowTime'
+				},
+				{
+					title: '最新跟进时间',
+					dataIndex: 'lastFollowTime',
+					key: 'lastFollowTime',
+				},
+				{
+					title: '剩余签单天数',
+					dataIndex: 'surplusSignTime',
+					key: 'surplusSignTime'
+				},
+				{
+					title: '操作',
+					dataIndex: 'abc',
+					key: 'abc',
+					render: (text, record, index) => {
+						return <div>
+                            <Button onClick={(e) =>{ e.stopPropagation(), this.visit(record)}} type="primary">客户跟进</Button>                            							    
+                        </div>
+					}
+				}
+			],
+			data: [],
+			dataman: [],
+			dataSource: [],
+			visitArrList: [],
+			searchTime: [, ]
+		};
+	},
+	
+	
+	
+	//进入新增拜访记录
+	visit(e) {
+		this.setState({
+			followData:e,
+			visitModul:true,
+			modalVisible:false
+		})
+	},
+	//列表删除功能
+	delectRow() {
+		let deletedIds;
+		for(let idx = 0; idx < this.state.selectedRows.length; idx++) {
+			let rowItem = this.state.selectedRows[idx];
+			if(rowItem.id) {
+				deletedIds = rowItem.id;
+			};
+		};
+		this.setState({
+			loading: true,
+			selectedRowKeys: [],
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/deleteCustomer",
+			data: {
+				uid: deletedIds, //删除的ID    
+			}
+		}).done(function(data) {
+			if(!data.error.length) {
+				message.success('删除成功!');
+				this.setState({
+					loading: false,
+				});
+			} else {
+				message.warning(data.error[0].message);
+			};
+			this.loadData(this.state.ispage);
+		}.bind(this));
+	},
+	componentWillMount() {
+		//城市
+		let Province = [];
+		provinceList.map(function(item) {
+			var id = String(item.id)
+			Province.push(
+				<Select.Option value={id} key={item.name}>{item.name}</Select.Option>
+			)
+		});
+		//行业
+		let intentionalArr = [];
+		industry.map(function(item) {
+			intentionalArr.push(
+				<Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+			)
+		});
+		//会员等级
+		let lvlArr = [];
+		lvl.map(function(item) {
+			lvlArr.push(
+				<Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+			)
+		});
+		//会员状态customerStatus
+		let currentMemberArr = [];
+		currentMember.map(function(item) {
+			currentMemberArr.push(
+				<Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+			)
+		});
+		this.state.Provinces = Province;
+		this.state.intentionalOption = intentionalArr;
+		this.state.lvlArrOption = lvlArr;
+		this.state.currentMemberArrOption = currentMemberArr;
+		this.loadData();
+		this.category()
+	},
+	addClick() {
+		this.state.RowData = {};
+		this.setState({
+			detailApi:this.props.detailApi,
+			showDesc: true,
+			modalVisible:false,
+			visitModul:false
+		});
+	},
+	closeDesc(e, s) {
+		this.state.basicState=e
+		this.state.visitModul=e;
+		this.state.modalVisible=e;
+		this.state.showDesc = e;
+		if(s) {
+			this.loadData(this.state.ispage);
+		};
+	},
+	search() {
+		this.loadData();
+	},
+	reset() {
+		this.state.nameSearch = '';
+		this.state.addressSearch = [];
+		this.state.provinceSearch = undefined;
+		this.state.citySearch = undefined;
+		this.state.releaseDate[0] = undefined;
+		this.state.releaseDate[1] = undefined;
+		this.loadData();
+	},
+	searchSwitch() {
+		this.setState({
+			visitModul:false,
+			searchMore: !this.state.searchMore
+		});
+	},
+	//整行点击
+	tableRowClick(record, index) {
+		this.state.visitModul=false;
+		this.state.RowData = record;
+		this.setState({
+			selectedRowKeys: [],
+			modalVisible:true,
+			basicState:true
+		})
+	},
+	//指定转交人自动补全
+	supervisor(e){ 
+		$.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/customer/listAdminByName",
+            data:{
+            	adminName:e
+            },
+            success: function (data) {                	  
+				       let thedata=data.data;
+				    if (!thedata) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };	
+                    thedata = {}; 
+              }; 
+					this.setState({
+						customerArr:thedata,	
+                    });
+				}.bind(this),
+			}).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));  
+	},
+	//上级主管输入框失去焦点是判断客户是否存在
+	selectAuto(value,options){
+		this.setState({
+			auto:value
+		})
+	},
+	blurChange(e){
+		let theType='';
+		let contactLists=this.state.customerArr||[];
+			if (e) {
+            contactLists.map(function (item) {
+                if (item.name == e.toString()) {
+                    theType = item.id;
+                }
+           });     
+   	    }
+		this.setState({
+			theTypes:theType
+		})
+	},
+	//值改变时请求客户名称
+	httpChange(e){
+		if(e.length>=1){
+			this.supervisor(e); 
+		}	
+		this.setState({
+			auto:e
+		})
+	},
+	//转交
+	changeAssigner() {
+		if(this.state.theTypes){
+			this.setState({
+				selectedRowKeys: [],
+			});
+			let changeIds,oldAid;
+			for(let idx = 0; idx < this.state.selectedRows.length; idx++) {
+				let rowItem = this.state.selectedRows[idx];
+				if(rowItem.id) {
+					oldAid=rowItem.aid;
+					changeIds = rowItem.id;
+				};
+			};
+			$.ajax({
+				method: "get",
+				dataType: "json",
+				crossDomain: false,
+				url: globalConfig.context + "/api/admin/customer/transferToOther",
+				data: {
+					uid: changeIds, //这一行数据的ID
+					aid: this.state.theTypes, //指定转交人的ID 
+					oldAid:oldAid
+				}
+			}).done(function(data) {
+				if(!data.error.length) {
+					message.success('转交成功!');
+					this.setState({
+						auto:'',
+						loading: false,
+					});
+				} else {
+					message.warning(data.error[0].message);
+				};
+				this.loadData(this.state.ispage);
+			}.bind(this));
+		}else{
+			message.warning('请输入转交人姓名')
+		}
+	},
+
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.ApiUrl!=this.props.ApiUrl) {
+			if(!this.state.searchMore){
+				this.state.searchMore=true
+			}
+			this.loadData(null,nextProps.ApiUrl);
+		};
+	},
+	render() {
+		const FormItem = Form.Item;
+		const rowSelection = {
+			selectedRowKeys: this.state.selectedRowKeys,
+			onChange: (selectedRowKeys, selectedRows) => {
+				this.setState({
+					modalVisible:false,
+					selectedRows: selectedRows.slice(-1),
+					selectedRowKeys: selectedRowKeys.slice(-1)
+				});
+			},
+			onSelect: (recordt, selected, selectedRows) => {
+				this.setState({
+					modalVisible:false,
+					recordt: recordt.id
+				})
+			},
+		};
+		const hasSelected = this.state.selectedRowKeys.length > 0;
+		const { RangePicker } = DatePicker;
+		const dataSources=this.state.customerArr || [];
+        const options = dataSources.map((group) =>
+				      <Select.Option key={group.id} value={group.name}>{group.name}</Select.Option>
+				     )
+        const intentionState = this.props.intentionState ||'';
+		return(
+			<div className="user-content" >
+                <div className="content-title">                  
+                    <span>{!intentionState?'我的单位意向客户':'我的个人意向客户'}</span>
+                </div>
+                <div className="user-search">                    
+                    <Input placeholder="客户名称"
+                        value={this.state.nameSearch}
+                        onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />    
+                    <Select placeholder="省"
+                            style={{ width: 80 }}
+                            value={this.state.provinceSearch}
+                            onChange={(e) => {this.setState({ provinceSearch: e});}}>
+                            {this.state.Provinces}
+                    </Select> 
+                    <span style={{marginRight:'10px'}}>                   
+	                     <Cascader options={citySelect()}  value={this.state.addressSearch} placeholder="选择城市"
+    						onChange={(e,pre) => { this.setState({ addressSearch: e }) }} />	                 
+                    </span>
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button>                      
+                    {/*<Button onClick={() => { window.open(globalConfig.context + '/api/admin/customer/downloadTemplate?type=1') }}>下载批量导入模板</Button>
+               		<Upload 
+               		    name="file"
+                        action={globalConfig.context + "/api/admin/customer/uploadExcel"}                            
+                        beforeUpload={beforeUploadFile}
+                        showUploadList={false}
+                        onChange={(info) => {
+                            if (info.file.status !== 'uploading') {
+                                console.log(info.file, info.fileList);
+                            }
+                            if (info.file.status === 'done') {
+                                if (!info.file.response.error.length) {
+                                    message.success(`${info.file.name} 文件上传成功!`);
+                                    this.loadData();
+                                } else {
+                                    message.warning(info.file.response.error[0].message);
+                                    return;
+                                };
+                            } else if (info.file.status === 'error') {
+                                message.error(`${info.file.name} 文件上传失败。`);
+                            };
+                        }} >
+                        <Button>上传批量内容</Button>
+                    </Upload>  
+                    */}
+	               {adminData.isSuperAdmin?<Popconfirm title="是否删除?" onConfirm={this.delectRow} okText="是" cancelText="否">
+							     <Button type="danger" style={{marginLeft:'10px'}}
+	                       			 disabled={!hasSelected} 
+	                       		 >删除<Icon type="minus" />
+	                        </Button>
+	                </Popconfirm>:''
+	                }
+	                <AutoComplete
+				        className="certain-category-search"
+				        dropdownClassName="certain-category-search-dropdown"
+				        dropdownMatchSelectWidth={false}
+				        dropdownStyle={{ width: 120 }}
+				        style={{ width: '120px'}}
+				        dataSource={options}
+				        placeholder="输入转交人姓名"
+				        value={this.state.auto}
+				        onChange={this.httpChange}
+				        filterOption={true}
+				        onBlur={this.blurChange}
+				        onSelect={this.selectAuto}
+				        disabled={!hasSelected}
+				      >
+				        <Input />
+				      </AutoComplete>  
+					<Button type="primary" onClick={this.changeAssigner}  disabled={!hasSelected} >转交</Button>  
+	                <span style={{marginLeft:'10px',marginRight:'20px'}}>更多搜索<Switch checked={!this.state.searchMore} onChange={this.searchSwitch} /></span>
+                    <Button type="primary" className="addButton" onClick={this.addClick}>新增客户<Icon type="plus" /></Button> 
+                    <div className='clearfix' style={{marginTop:'5px'}}>
+	                  <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>                    			                  
+			                <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 }); }} />    
+			            </div>  
+		            </div>
+                </div>                                               
+                <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> 
+                <AddIntention
+                	api={this.state.detailApi}
+                    showDesc={this.state.showDesc}
+                    closeDesc={this.closeDesc} 
+                    />
+    			<FollowDetail 
+    			    categoryArr={this.state.categoryArr}
+    				followData={this.state.followData}
+    				visitModul={this.state.visitModul}
+    				closeDesc={this.closeDesc}
+    			/>
+    			<IntentionDetail 
+    				categoryArr={this.state.categoryArr}
+    				detailApi={this.props.detailApi}
+    				IntentionData={this.state.RowData}
+    				modalVisible={this.state.modalVisible}
+    				closeDesc={this.closeDesc}
+    				basicState={this.state.basicState}
+    			/>
+          </div >
+		);
+	}
+}));
+export default IntentionCustomer;

+ 207 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/account.jsx

@@ -0,0 +1,207 @@
+import React from 'react';
+import {Form,Button,Spin,message,Input,Select,Radio} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+const FormItem =Form.Item;
+import {statuslist,lvl,currentMember} from '@/dataDic.js';
+import {getcustomerTyp} from '@/tools.js';
+const Account =React.createClass({
+	httpAccount(record) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/findUserAccountDetail',
+			data: {
+				uid: record
+			},
+			success: function(data) {
+				let thisData = data.data;
+				if(!thisData) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thisData = {};
+				};
+				let sourcecustomer = ''
+				switch(String(thisData.source)) {
+					case '0':
+						sourcecustomer = '注册客户'
+						break;
+					case '1':
+						sourcecustomer = '录入客户'
+						break;
+				}
+				this.setState({
+					Accountuid: thisData.id,
+					mobile: thisData.mobile,
+					nickname: thisData.nickname,
+					email: thisData.email,
+					type: getcustomerTyp(String(thisData.type)),
+					source: sourcecustomer,
+					isMember: thisData.isMember,
+					currentMemberStatus: String(thisData.currentMemberStatus),
+					lvl: String(thisData.lvl),
+					status: String(thisData.status),
+					createTimes: thisData.createTimes,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	getInitialState(){
+		return{
+			loading:false
+		}
+	},
+	//账户信息保存
+	accountSave(e) {
+		e.preventDefault();
+		if(!this.state.mobile) {
+			message.warning('手机号码不能为空!')
+			return false;
+		}
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/updateUserAccount',
+			data: {
+				id: this.state.Accountuid,
+				mobile: this.state.mobile,
+				nickname: this.state.nickname,
+				email: this.state.email,
+				isMember: this.state.isMember,
+				currentMemberStatus: this.state.currentMemberStatus,
+				lvl: this.state.lvl,
+				status: this.state.status,
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDetail(false,true)
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+	},
+	componentWillMount(){
+		this.httpAccount(this.props.data.id);
+	},
+	detailsModal(){
+		this.props.closeDetail(false, false)
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.id&&nextProps.accountState){
+			this.httpAccount(nextProps.data.id)
+		}
+	},
+	render(){
+		const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+		return(
+			<div className="clearfix">
+    			<Form layout="horizontal" id="demand-form" onSubmit={this.accountSave} >
+    				<Spin spinning={this.state.loading} >
+    					<FormItem className="half-item"
+	                            {...formItemLayout}
+	                            label="注册手机号" >
+    							<span>{this.state.mobile}</span>
+	                    </FormItem>
+	                    <FormItem className="half-item"
+	                            {...formItemLayout}
+	                            label="注册用户名" >
+	                         <Input value={this.state.nickname}  onChange={(e) => { this.setState({ nickname: e.target.value }); }} />        
+	                    </FormItem>
+	                    <FormItem className="half-item"
+	                            {...formItemLayout}
+	                            label="注册邮箱" >
+	                         <Input value={this.state.email}  onChange={(e) => { this.setState({ email: e.target.value }); }} />        
+	                    </FormItem>
+	                    <div className="clearfix">
+		                    <FormItem className="half-item"
+		                            {...formItemLayout}
+		                            label="客户来源" >
+		                            <span>{this.state.source}</span>   
+		                    </FormItem>
+		                    <FormItem className="half-item"
+		                            {...formItemLayout}
+		                            label="客户类型" >
+		                            <span>{this.state.type}</span>   
+		                    </FormItem>
+		                    <FormItem className="half-item"
+		                            {...formItemLayout}
+		                            label="创建时间" >
+		                            <span>{this.state.createTimes}</span>   
+		                    </FormItem>
+		                    <FormItem className="half-item" 
+	                           {...formItemLayout}
+	                           label="账户状态"
+	                         > 
+							    <Select placeholder="账户状态" value={this.state.status}  onChange={(e) => { this.setState({ status: e }); }} >
+                                {
+                                    statuslist.map(function (item) {
+                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                }
+                              </Select>
+	                   		</FormItem>
+	                   	</div>
+                   		<div className="clearfix">
+				            <FormItem className="half-item"
+				                {...formItemLayout}
+		                        label="会员"
+				            > 
+		                   		 <Radio.Group value={this.state.isMember} onChange={(e) => {
+				                        this.setState({ isMember:  e.target.value })
+				                    }}>
+				                        <Radio value={0}>否</Radio>
+				                        <Radio value={1}>是</Radio>
+				                  </Radio.Group>
+				            </FormItem>
+				            <FormItem className="half-item" 
+		                          {...formItemLayout}
+		                           label="会员等级"
+		                         > 
+							    <Select placeholder="客户状态" value={this.state.lvl}  onChange={(e) => { this.setState({ lvl: e }); }} >
+                                 {
+                                    lvl.map(function (item) {
+                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                 }
+                               </Select>
+	                   		</FormItem>
+	                   		<FormItem className="half-item" 
+	                           {...formItemLayout}
+	                           label="会员状态"
+	                         > 
+							    <Select placeholder="会员状态" value={this.state.currentMemberStatus}  onChange={(e) => { this.setState({ currentMemberStatus: e }); }} >
+                                {
+                                    currentMember.map(function (item) {
+                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                }
+                                </Select>
+	                   		</FormItem>
+	                   	</div>
+			            <div className="clearfix">
+			                <Button className='saveBtn' type="primary" htmlType="submit">保存</Button>  
+                            <Button  type="ghost" onClick={this.detailsModal}>取消</Button>
+			            </div>
+    				</Spin>
+    			</Form>	
+    		</div>
+		)
+	}
+})
+export default Account;

+ 506 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/basic.jsx

@@ -0,0 +1,506 @@
+import React from 'react';
+import { Radio, Icon, Button, AutoComplete, Cascader, layout, Input, Select, Tabs, Spin, Popconfirm, Popover, Table, Switch, message, DatePicker, Modal, Upload, Form, Row, Col, TimePicker } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import { citySelect, provinceList, areaSelect } from '@/NewDicProvinceList';
+import { socialAttribute, industry, newFollow, auditStatusL, lvl, currentMember, cityArr, statuslist, customerStatus, intentionalService, sex } from '@/dataDic.js';
+import { getCompanyIntention, splitUrl, getIndustry, getStatuslist, getAuditStatus, getContactType, getSocialAttribute, getfllowSituation, beforeUploadFile, getWhether, getcityArr, getcustomerStatue, getfllowSituationOn, getCertification, getcustomerTyp, getLvl, getCurrentMember, getprovince } from '@/tools.js';
+const FormItem = Form.Item;
+//图片组件
+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;
+	},
+	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 Basic = React.createClass({
+	getInitialState() {
+		return {
+			loading: false,
+			orgCodeUrl: [],
+			companyLogoUrl: [],
+		}
+	},
+	loadInformation(record) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/findOrganizationCustomerDetail',
+			data: {
+				uid: record
+			},
+			success: function(data) {
+				let thisData = data.data;
+				if(!thisData) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thisData = {};
+				};
+				let ProvinceCityArr = [];
+				let ProvinceS = thisData.locationProvince; //getprovince
+				let citys = thisData.locationCity;
+				let Areas = thisData.locationArea;
+				ProvinceCityArr.push(ProvinceS, citys, Areas);
+				this.setState({
+					InformationId: thisData.id,
+					InformationUid: thisData.uid,
+					identifyName: thisData.identifyName,
+					listed: thisData.listed,
+					highTechZone: thisData.highTechZone,
+					orgCodeUrl: thisData.orgCodeUrl ? splitUrl(thisData.orgCodeUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					companyLogoUrl: thisData.companyLogoUrl ? splitUrl(thisData.companyLogoUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					dataInformation: thisData,
+					ProvinceCity: ProvinceCityArr[0]!=null?ProvinceCityArr:undefined,
+					contacts: thisData.contacts,
+					contactMobile: thisData.contactMobile,
+					industry: String(thisData.industry) == 'null' ? undefined : String(thisData.industry),
+					international: thisData.international,
+					societyTag: thisData.societyTag||undefined,
+					introduction: thisData.introduction,
+					postalAddress: thisData.postalAddress,
+					contactsFixedTel: thisData.contactsFixedTel,
+					contactsFax: thisData.contactsFax,
+					registeredCapital: thisData.registeredCapital,
+					enterpriseScale: thisData.enterpriseScale,
+					legalPerson: thisData.legalPerson,
+					legalPersonIdCard: thisData.legalPersonIdCard,
+					legalPersonTel: thisData.legalPersonTel,
+					legalPersonEmail: thisData.legalPersonEmail,
+					businessScope: thisData.businessScope,
+					orgCode: thisData.orgCode,
+					investment: thisData.investment,
+					auditStatus: thisData.auditStatus ? String(thisData.auditStatus) : undefined,
+					businessAudit: thisData.businessAudit
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//图片
+	getOrgCodeUrl(e) {
+		this.setState({
+			orgCodeUrl: e
+		});
+	},
+	getCompanyLogoUrl(e) {
+		this.setState({
+			companyLogoUrl: e
+		});
+	},
+	//基本信息提交
+	newSubmit(e) {
+		e.preventDefault();
+		if(!this.state.industry) {
+			message.warning('请选择行业');
+			return false;
+		};
+		if(!this.state.societyTag) {
+			message.warning('请选择社会性质');
+			return false;
+		};
+		if(!this.state.ProvinceCity[1]) {
+			message.warning('请选择地区');
+			return false;
+		};
+		if(isNaN(this.state.registeredCapital)) {
+			message.warning('注册资本只能输入数字')
+			return false;
+		};
+		if(isNaN(this.state.enterpriseScale)) {
+			message.warning('单位规模只能输入数字')
+			return false;
+		}
+		this.setState({
+			selectedRowKeys: [],
+		});
+
+		let theorgCodeUrl = [];
+		if(this.state.orgCodeUrl.length) {
+			let picArr = [];
+			this.state.orgCodeUrl.map(function(item) {
+				if(item.response && item.response.data && item.response.data.length) {
+					picArr.push(item.response.data);
+				}
+			});
+			theorgCodeUrl = picArr.join(",");
+		};
+		let thecompanyLogoUrl = [];
+		if(this.state.companyLogoUrl.length) {
+			let picArr = [];
+			this.state.companyLogoUrl.map(function(item) {
+				if(item.response && item.response.data && item.response.data.length) {
+					picArr.push(item.response.data);
+				}
+			});
+			thecompanyLogoUrl = picArr.join(",");
+		};
+
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/updateOrganizationCustomer',
+			data: {
+				id: this.state.InformationId,
+				uid: this.state.InformationUid,
+				societyTag: this.state.societyTag,
+				introduction: this.state.introduction,
+				unitName: this.state.unitName,
+				industry: this.state.industry,
+				locationProvince: (this.state.ProvinceCity)[0], //省-
+				locationCity: (this.state.ProvinceCity)[1], //市
+				locationArea: (this.state.ProvinceCity)[2], //区
+				postalAddress: this.state.postalAddress,
+				contactsFixedTel: this.state.contactsFixedTel,
+				contactsFax: this.state.contactsFax,
+				registeredCapital: this.state.registeredCapital ? this.state.registeredCapital : 0,
+				enterpriseScale: this.state.enterpriseScale ? this.state.enterpriseScale : 0,
+				legalPerson: this.state.legalPerson,
+				legalPersonIdCard: this.state.legalPersonIdCard,
+				legalPersonTel: this.state.legalPersonTel,
+				legalPersonEmail: this.state.legalPersonEmail,
+				highTechZone: this.state.highTechZone,
+				listed: this.state.listed,
+				contacts: this.state.contacts,
+				contactMobile: this.state.contactMobile,
+				international: this.state.international,
+				orgCode: this.state.orgCode,
+				businessScope: this.state.businessScope,
+				introduction: this.state.introduction,
+				companyLogoUrl: thecompanyLogoUrl != 0 ? thecompanyLogoUrl : '',
+				orgCodeUrl: theorgCodeUrl != 0 ? theorgCodeUrl : '',
+				businessAudit: this.state.businessAudit,
+				auditStatus: this.state.auditStatus
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDetail(false, true)
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+	},
+	//取消
+	detailsModal() {
+		this.props.closeDetail(false, false)
+	},
+	componentWillMount(){
+		this.loadInformation(this.props.data.id)
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data&&nextProps.basicState){
+			this.loadInformation(nextProps.data.id)
+		}
+	},
+	render() {
+		return(
+			<div>
+				 <Form layout="horizontal" onSubmit={this.newSubmit} id="demand-form">
+	                <Spin spinning={this.state.loading}>
+		               	<div className="clearfix" style={{paddingLeft:'60px'}}>
+	                    	<FormItem className="half-item"
+			                    labelCol={{ span: 4 }}
+			                    wrapperCol={{ span: 18 }}
+			                    label="客户名称"
+		                        >
+		                        <span>{this.state.identifyName}</span>
+		                    </FormItem>
+	                    </div>
+	                    <div className="clearfix" style={{paddingLeft:'60px'}}>
+	                    	<FormItem className="half-item" 
+	                         labelCol={{ span: 4 }}
+	                         wrapperCol={{ span: 18 }}
+	                         label="行业">
+							    <Select placeholder="选择行业" value={this.state.industry}  style={{width:'300px'}}
+							    				onChange={(e)=>{this.setState({industry:e})}}>
+                                      {
+                                        industry.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                      }
+                                </Select>
+                                <span style={{color:'red',marginLeft:'15px'}}>*</span>
+	                   		 </FormItem>
+	                   		 <FormItem className="half-item" 
+	                           labelCol={{ span: 4 }}
+	                            wrapperCol={{ span: 18 }}
+	                           label="社会属性"
+	                         > 
+								    <Select placeholder="客户社会属性(必填项)" value={this.state.societyTag}  style={{width:'300px'}}
+							    				onChange={(e)=>{this.setState({societyTag:e})}}>
+                                    {
+                                        socialAttribute.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                    }
+                                </Select>
+                                <span style={{color:'red',marginLeft:'15px'}}>*</span>
+	                   		 </FormItem>
+	                         <FormItem className="half-item" 
+	                           labelCol={{ span: 4 }}
+	                           wrapperCol={{ span: 18 }}
+	                           label="省-市-区"
+	                          > 
+	                            <Cascader options={areaSelect()}  value={this.state.ProvinceCity} placeholder="选择城市" style={{width:'300px'}}
+									onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} />
+									<span style={{color:'red',marginLeft:'15px'}}>*</span>
+		                   </FormItem>
+		                   <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                         label="通信地址"
+		                            >
+		                                <Input placeholder="客户通信地址" value={this.state.postalAddress} 
+							    				onChange={(e)=>{this.setState({postalAddress:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                         label="固定电话"
+		                            >
+		                                <Input placeholder="客户固定电话" value={this.state.contactsFixedTel} 
+							    				onChange={(e)=>{this.setState({contactsFixedTel:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="客户传真"
+		                            >
+		                                <Input placeholder="客户传真" value={this.state.contactsFax} 
+							    				onChange={(e)=>{this.setState({contactsFax:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="注册资本"
+		                            >
+		                                <Input placeholder="注册资本" value={this.state.registeredCapital}  maxLength='6'
+							    				onChange={(e)=>{this.setState({registeredCapital:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="单位规模"
+		                            >
+		                                <Input placeholder="单位规模" value={this.state.enterpriseScale} maxLength='1'
+							    				onChange={(e)=>{this.setState({enterpriseScale:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="法人名称"
+		                            >
+		                                <Input placeholder="法人名称" value={this.state.legalPerson} 
+							    				onChange={(e)=>{this.setState({legalPerson:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="身份证号码"
+		                            >
+		                                <Input placeholder="法人身份证号码" value={this.state.legalPersonIdCard} 
+							    				onChange={(e)=>{this.setState({legalPersonIdCard:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item" 
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="主要联系人"
+	                           	 >
+		                            <Input placeholder="主要联系人" value={this.state.contacts} onChange={(e) => {
+				                        this.setState({ contacts:  e.target.value })}}/>
+		                     </FormItem>
+		                     <FormItem className="half-item" 
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="主要联系人号码"
+	                           	 >
+		                            <Input placeholder="主要联系人号码" value={this.state.contactMobile} onChange={(e) => {
+				                        this.setState({ contactMobile:  e.target.value })}}/>
+		                     </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="法人电话"
+		                            > 
+		                                <Input placeholder="法人电话" value={this.state.legalPersonTel} 
+							    				onChange={(e)=>{this.setState({legalPersonTel:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="电子邮箱"
+		                            >
+		                                <Input placeholder="法人电子邮箱" value={this.state.legalPersonEmail} 
+							    				onChange={(e)=>{this.setState({legalPersonEmail:e.target.value})}}/>
+		                    </FormItem>
+				            <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="机构代码"
+		                            >
+		                                <Input placeholder="社会同意机构代码" value={this.state.orgCode} 
+							    				onChange={(e)=>{this.setState({orgCode:e.target.value})}}/>
+		                    </FormItem>
+				           <div className="clearfix">
+					        <FormItem className="half-item"
+		                   			 labelCol={{ span: 4 }}
+	                            wrapperCol={{ span: 18 }}
+			                           label="业务认证"
+		                   		>
+			                   		 <Radio.Group value={this.state.businessAudit} onChange={(e) => {
+					                        this.setState({ businessAudit:  e.target.value })
+					                    }}>
+					                        <Radio value={0}>未认证</Radio>
+					                        <Radio value={1}>已认证</Radio>
+					                  </Radio.Group>
+					        </FormItem>
+	                   		<FormItem className="half-item"
+                   		   		labelCol={{ span: 4 }}
+	                            wrapperCol={{ span: 18 }}
+	                            label="高新"
+	                   		    >
+		                   		 <Radio.Group value={this.state.highTechZone} onChange={(e) => {
+				                        this.setState({highTechZone:e.target.value})
+				                    }}>
+				                        <Radio value={0}>否</Radio>
+				                        <Radio value={1}>是</Radio>
+				                  </Radio.Group>
+				            </FormItem>
+	                   	     <FormItem className="half-item"
+                   		   		labelCol={{ span: 4 }}
+	                            wrapperCol={{ span: 18 }}
+	                            label="上市"
+	                   		    >
+		                   		 <Radio.Group value={this.state.listed} onChange={(e) => {
+				                        this.setState({listed:e.target.value })
+				                    }}>
+				                        <Radio value={0}>否</Radio>
+				                        <Radio value={1}>是</Radio>
+				                  </Radio.Group>
+						     </FormItem>
+						     <FormItem className="half-item"
+                   		   		labelCol={{ span: 4 }}
+	                            wrapperCol={{ span: 18 }}
+	                            label="国际化"
+	                   		    >
+		                   		 <Radio.Group value={this.state.international} onChange={(e) => {
+				                        this.setState({international:e.target.value })
+				                    }}>
+				                        <Radio value={0}>否</Radio>
+				                        <Radio value={1}>是</Radio>
+				                  </Radio.Group>
+						     </FormItem>
+						     </div>
+		                    <div className="clearfix pictures">
+		                        <FormItem
+			                        labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="机构证(PIC)" >
+			                        <PicturesWall
+			                            pictureSign="PIC"
+			                            fileList={this.getOrgCodeUrl}
+			                            pictureUrl={this.state.orgCodeUrl} />
+			                            <p>图片建议:图片要清晰。</p>
+		                        </FormItem>
+		                        <FormItem
+			                        labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="单位logo" > 
+			                        <PicturesWall
+			                            pictureSign="logo"
+			                            fileList={this.getCompanyLogoUrl}
+			                            pictureUrl={this.state.companyLogoUrl} />
+			                            <p>图片建议:图片要清晰。</p>
+			                    </FormItem>
+			                </div> 
+			                <div className="clearfix">
+			                    <FormItem
+		                        labelCol={{ span: 2 }}
+		                        wrapperCol={{ span: 18 }}
+		                        label="业务范围" >
+		                            <Input type="textarea" rows={4} value={this.state.businessScope} 
+							    				onChange={(e)=>{this.setState({businessScope:e.target.value})}}/>
+			                    </FormItem>
+			                    <FormItem
+			                        labelCol={{ span: 2 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="单位简介" >
+			                            <Input type="textarea" rows={4}  value={this.state.introduction} 
+							    				onChange={(e)=>{this.setState({introduction:e.target.value})}}/>			                      
+			                    </FormItem>
+		                    </div>
+		                    <Button className="set-submit" type="primary" htmlType="submit" >保存</Button>  
+	                        <Button  type="ghost" onClick={this.detailsModal}>取消</Button>
+	                    </div>		                	
+				    </Spin>
+				</Form>		
+			</div>
+		)
+	}
+})
+export default Basic;

+ 555 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/basicPerson.jsx

@@ -0,0 +1,555 @@
+import React from 'react';
+import { Radio, Icon, Button, AutoComplete, Cascader, layout, Input, Select, Tabs, Spin, Popconfirm, Popover, Table, Switch, message, DatePicker, Modal, Upload, Form, Row, Col, TimePicker } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import { citySelect, provinceList, areaSelect } from '@/NewDicProvinceList';
+import { socialAttribute, industry, newFollow, auditStatusL, lvl, currentMember, cityArr, statuslist, customerStatus, intentionalService, sex } from '@/dataDic.js';
+import { getCompanyIntention, splitUrl, getIndustry, getStatuslist, getAuditStatus, getContactType, getSocialAttribute, getfllowSituation, beforeUploadFile, getWhether, getcityArr, getcustomerStatue, getfllowSituationOn, getCertification, getcustomerTyp, getLvl, getCurrentMember, getprovince } from '@/tools.js';
+const FormItem = Form.Item;
+const monthFormat = 'YYYY/MM';
+//图片组件
+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;
+	},
+	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 Basic = React.createClass({
+	getInitialState() {
+		return {
+			loading: false,
+			orgCodeUrl: [],
+			companyLogoUrl: [],
+			headPortraitUrl: [],
+			positiveIdUrl: [],
+			oppositeIdUrl: []
+		}
+	},
+	loadInformation(record) {
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/findPersonalCustomerDetail',
+			data: {
+				uid: record
+			},
+			success: function(data) {
+				let thisData = data.data;
+				if(!thisData) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thisData = {};
+				};
+				let ProvinceCityArr = [];
+				let ProvinceS = thisData.province; //getprovince
+				let citys = thisData.city;
+				let Areas = thisData.area;
+				ProvinceCityArr.push(ProvinceS, citys, Areas);
+				let month = thisData.dateOfBirthYear ? thisData.dateOfBirthYear + '/' + thisData.dateOfBirthMonth : false;
+				this.setState({
+					InformationId: thisData.id,
+					InformationUid: thisData.uid,
+					identifyName: thisData.identifyName,
+					listed: thisData.listed,
+					highTechZone: thisData.highTechZone,
+					headPortraitUrl: thisData.headPortraitUrl ? splitUrl(thisData.headPortraitUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					positiveIdUrl: thisData.positiveIdUrl ? splitUrl(thisData.positiveIdUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					oppositeIdUrl: thisData.oppositeIdUrl ? splitUrl(thisData.oppositeIdUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					dataInformation: thisData,
+					idNumber: thisData.idNumber,
+					contacts: thisData.contacts,
+					contactMobile: thisData.contactMobile,
+					ProvinceCity: ProvinceCityArr[0]!=null?ProvinceCityArr:undefined,
+					industry: thisData.industry ? String(thisData.industry) : undefined,
+					societyTag: thisData.societyTag||undefined,
+					sex: thisData.sex,
+					yearMonth: month,
+					postalAddress: thisData.postalAddress,
+					fixedTel: thisData.fixedTel,
+					consultationPrice: thisData.consultationPrice,
+					email: thisData.email,
+					qq: thisData.qq,
+					introduction: thisData.introduction,
+					expert: thisData.expert,
+					celebrity: thisData.celebrity,
+					consultant: thisData.consultant,
+					international: thisData.international,
+					investment: thisData.investment,
+					professionalTitle: thisData.professionalTitle,
+					workUnit: thisData.workUnit,
+					education: thisData.education,
+					graduateSchool: thisData.graduateSchool,
+					majorCategory: thisData.majorCategory,
+					qualification: thisData.qualification,
+					businessAudit: thisData.businessAudit,
+					auditStatus: thisData.auditStatus ? String(thisData.auditStatus) : undefined,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//图片
+	getOrgCodeUrl(e) {
+		this.setState({
+			orgCodeUrl: e
+		});
+	},
+	getCompanyLogoUrl(e) {
+		this.setState({
+			companyLogoUrl: e
+		});
+	},
+	//基本信息提交
+	newSubmit(e) {
+		e.preventDefault();
+		if(!this.state.industry) {
+			message.warning('请选择行业');
+			return false;
+		};
+		if(!this.state.societyTag) {
+			message.warning('请选择社会性质');
+			return false;
+		};
+		if(!this.state.ProvinceCity[1]) {
+			message.warning('请选择地区');
+			return false;
+		};
+		var reg = /^[1-9]\d*$|^0$/;
+		if(this.state.consultationPrice) {
+			if(this.state.consultationPrice.length > 6) {
+				message.warning('咨询费用不超过6位数');
+				this.refs.consul.focus();
+				return false;
+			};
+			if(!reg.test(this.state.consultationPrice)) {
+				message.warning('咨询费用只能输入数字');
+				this.refs.consul.focus();
+				return false;
+			}
+		}
+
+		this.state.data = [];
+		this.setState({
+			selectedRowKeys: [],
+		});
+
+		let theorgCodeUrl = [];
+		if(this.state.headPortraitUrl.length) {
+			let picArr = [];
+			this.state.headPortraitUrl.map(function(item) {
+				if(item.response && item.response.data && item.response.data.length) {
+					picArr.push(item.response.data);
+				}
+			});
+			theorgCodeUrl = picArr.join(",");
+		};
+		let thecompanyLogoUrl = [];
+		if(this.state.positiveIdUrl.length) {
+			let picArr = [];
+			this.state.positiveIdUrl.map(function(item) {
+				if(item.response && item.response.data && item.response.data.length) {
+					picArr.push(item.response.data);
+				}
+			});
+			thecompanyLogoUrl = picArr.join(",");
+		};
+		let thecompanyLogoUrls = [];
+		if(this.state.oppositeIdUrl.length) {
+			let picArr = [];
+			this.state.oppositeIdUrl.map(function(item) {
+				if(item.response && item.response.data && item.response.data.length) {
+					picArr.push(item.response.data);
+				}
+			});
+			thecompanyLogoUrls = picArr.join(",");
+		};
+
+		let years = [];
+		let yearMonth = this.state.yearMonth != undefined ? new Date(this.state.yearMonth).toLocaleDateString() : '';
+		years = yearMonth.split('/');
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/updatePersonalCustomer',
+			data: {
+				id: this.state.InformationId,
+				uid: this.state.InformationUid,
+				societyTag: this.state.societyTag,
+				identifyName: this.state.identifyName,
+				industry: this.state.industry,
+				dateOfBirthYear: years[0], //出生年
+				dateOfBirthMonth: years[1], //出生月
+				province: (this.state.ProvinceCity)[0], //省-
+				city: (this.state.ProvinceCity)[1], //市
+				area: (this.state.ProvinceCity)[2], //区
+				sex: this.state.sex,
+				expert: this.state.expert,
+				celebrity: this.state.celebrity,
+				consultant: this.state.consultant,
+				international: this.state.international,
+				fixedTel: this.state.fixedTel,
+				consultationPrice: this.state.consultationPrice ? this.state.consultationPrice : 0,
+				qq: this.state.qq,
+				contacts: this.state.contacts,
+				contactMobile: this.state.contactMobile,
+				idNumber: this.state.idNumber,
+				email: this.state.email,
+				isMember: this.state.isMember,
+				postalAddress: this.state.postalAddress,
+				introduction: this.state.introduction,
+				positiveIdUrl: thecompanyLogoUrl.length != 0 ? thecompanyLogoUrl : '',
+				oppositeIdUrl: thecompanyLogoUrls != 0 ? thecompanyLogoUrls : '',
+				headPortraitUrl: theorgCodeUrl != 0 ? theorgCodeUrl : '',
+				investment: this.state.investment,
+				professionalTitle: this.state.professionalTitle,
+				workUnit: this.state.workUnit,
+				education: this.state.education,
+				graduateSchool: this.state.graduateSchool,
+				majorCategory: this.state.majorCategory,
+				qualification: this.state.qualification,
+				businessAudit: this.state.businessAudit,
+				auditStatus: this.state.auditStatus,
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDetail(false, true)
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+
+	},
+	//取消
+	detailsModal() {
+		this.props.closeDetail(false, false)
+	},
+	componentWillMount() {
+		this.loadInformation(this.props.data.id)
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data && nextProps.basicState) {
+			this.loadInformation(nextProps.data.id)
+		}
+	},
+	render() {
+		const {
+			RangePicker,
+			MonthPicker
+		} = DatePicker;
+		const formItemLayout = {
+			labelCol: {
+				span: 8
+			},
+			wrapperCol: {
+				span: 14
+			},
+		};
+		return(
+			<div>
+				 <Form layout="horizontal" onSubmit={this.newSubmit} id="demand-form">
+	                <Spin spinning={this.state.loading}>
+		               	<div className="clearfix" >
+	                    	<FormItem className="half-item"
+			                     {...formItemLayout}
+			                    label="客户姓名"
+		                        >
+	                    	 <span>{this.state.identifyName}</span>
+		                    </FormItem>
+	                    </div>
+	                    <div className="clearfix" >
+	                    	<FormItem className="half-item" 
+	                          {...formItemLayout}
+	                         label="行业">
+							    <Select placeholder="选择行业" value={this.state.industry}  style={{width:'300px'}}
+							    				onChange={(e)=>{this.setState({industry:e})}}>
+                                      {
+                                        industry.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                      }
+                                </Select>
+                                <span style={{color:'red',marginLeft:'15px'}}>*</span>
+	                   		 </FormItem>
+	                   		 <FormItem className="half-item" 
+	                            {...formItemLayout}
+	                           label="社会属性"
+	                           > 
+								    <Select placeholder="客户社会属性" value={this.state.societyTag}  style={{width:'300px'}}
+							    				onChange={(e)=>{this.setState({societyTag:e})}}> 
+                                     {
+                                        socialAttribute.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                    }
+                                </Select>  
+                                <span style={{color:'red',marginLeft:'15px'}}>*</span>
+	                   		 </FormItem>
+	                   		 <FormItem className="half-item" 
+	                            {...formItemLayout}
+	                           label="省-市-区"
+	                          > 
+	                            <Cascader options={areaSelect()}  value={this.state.ProvinceCity} placeholder="选择城市" style={{width:'300px'}}
+									onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} />
+									<span style={{color:'red',marginLeft:'15px'}}>*</span>
+		                    </FormItem>
+	                   		 <FormItem className="half-item" 
+		                           {...formItemLayout}
+		                           label="出生日期"
+	                          > 
+	                              {!this.state.yearMonth?<MonthPicker placeholder="选择出生年月" value={this.state.yearMonth||null} onChange={(time) => {this.setState({yearMonth: time});}}/>	   	 
+		                          :<MonthPicker value={moment(this.state.yearMonth, monthFormat)} format={monthFormat} onChange={(time) => {this.setState({yearMonth: time});}}/>
+		                    	}
+		                    </FormItem>
+		                     <FormItem className="half-item" 
+			                    	 {...formItemLayout}
+			                        label="身份证号码"
+	                           	 >
+		                            <Input placeholder="身份证号码" value={this.state.idNumber} onChange={(e) => {
+				                        this.setState({ idNumber:  e.target.value })}}/>
+		                     </FormItem>
+							<FormItem className="half-item" 
+			                    	 {...formItemLayout}
+			                        label="主要联系人"
+	                           	 >
+		                            <Input placeholder="主要联系人" value={this.state.contacts} onChange={(e) => {
+				                        this.setState({ contacts:  e.target.value })}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item" 
+			                    	 {...formItemLayout}
+			                        label="主要联系人号码"
+	                           	 >
+		                            <Input placeholder="主要联系人号码" value={this.state.contactMobile} onChange={(e) => {
+				                        this.setState({ contactMobile:  e.target.value })}}/>
+		                    </FormItem>
+		                    <div className="clearfix">
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="职称名字"
+		                           	 >
+			                            <Input placeholder="职称名字" value={this.state.professionalTitle} onChange={(e) => {
+					                        this.setState({ professionalTitle:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="就业单位"
+		                           	 >
+			                            <Input placeholder="就业单位" value={this.state.workUnit} onChange={(e) => {
+					                        this.setState({ workUnit:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="学历"
+		                           	 >
+			                            <Input placeholder="学历" value={this.state.education} onChange={(e) => {
+					                        this.setState({ education:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="毕业院校"
+		                           	 >
+			                            <Input placeholder="学历" value={this.state.graduateSchool} onChange={(e) => {
+					                        this.setState({ graduateSchool:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="专业类别"
+		                           	 >
+			                            <Input placeholder="专业类别" value={this.state.majorCategory} onChange={(e) => {
+					                        this.setState({ majorCategory:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="职业资格"
+		                           	 >
+			                            <Input placeholder="职业资格" value={this.state.qualification} onChange={(e) => {
+					                        this.setState({ qualification:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+				                    	 {...formItemLayout}
+				                         label="通信地址"
+			                            >
+			                                <Input placeholder="客户通信地址" value={this.state.postalAddress} 
+										onChange={(e,pre) => { this.setState({ postalAddress: e.target.value }) }}/>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+				                    	 {...formItemLayout}
+				                         label="固定电话"
+			                            >
+			                                <Input placeholder="客户固定电话" value={this.state.fixedTel} 
+										onChange={(e) => { this.setState({ fixedTel: e.target.value }) }}/>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+				                    	 {...formItemLayout}
+				                         label="客户QQ"
+			                            >
+			                                <Input placeholder="客户QQ" value={this.state.qq} 
+										onChange={(e) => { this.setState({ qq: e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+				                    	 {...formItemLayout}
+				                         label="电子邮箱"
+			                            >
+			                                <Input placeholder="客户电子邮箱" value={this.state.email} 
+										onChange={(e) => {this.setState({email: e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+				                    	 {...formItemLayout}
+				                         label="咨询费用"
+			                            >
+			                                <Input ref='consul' placeholder="请输入咨询费用" value={this.state.consultationPrice} 
+										onChange={(e) => {this.setState({consultationPrice: e.target.value })}}/>
+			                    </FormItem>
+			                </div>
+		                    <div className="clearfix">
+		                        <FormItem className="half-item"
+			                   			 {...formItemLayout}
+				                           label="业务认证"
+			                   		>
+				                   		 <Radio.Group value={this.state.businessAudit} onChange={(e) => {
+						                        this.setState({ businessAudit:  e.target.value })
+						                    }}>
+						                        <Radio value={0}>未认证</Radio>
+						                        <Radio value={1}>已认证</Radio>
+						                  </Radio.Group>
+						        </FormItem>
+						        <FormItem className="half-item"
+					                {...formItemLayout}
+			                        label="国际化"
+					            > 
+			                   		 <Radio.Group value={this.state.international} onChange={(e) => {
+					                        this.setState({ international:  e.target.value })
+					                    }}>
+					                        <Radio value={0}>否</Radio>
+					                        <Radio value={1}>是</Radio>
+					                  </Radio.Group>
+					             </FormItem>
+		                   		 <FormItem className="half-item" 
+			                            {...formItemLayout}
+			                           label="性别"
+			                         > 
+			                   		 <Radio.Group value={this.state.sex} onChange={(e) => {
+					                        this.setState({sex:e.target.value})
+					                    }}>
+					                        <Radio value={'男'}>男</Radio>
+					                        <Radio value={'女'}>女</Radio>
+					                  </Radio.Group>
+		                   		 </FormItem>
+	                   		 </div>
+		                    <div className='clearfix'>
+			                    <FormItem
+			                        labelCol={{ span:4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="客户简介" >
+			                            <Input type="textarea" rows={4} value={this.state.introduction} 
+									onChange={(e,pre) => { this.setState({ introduction: e.target.value })}}/>
+			                    </FormItem>
+		                    </div>
+		                    <div className="clearfix pictures">
+		                        <FormItem style={{display:'inline-block',width:'350px',marginTop:'20px',marginLeft:'95px'}}
+			                        labelCol={{ span: 8 }}
+			                        wrapperCol={{ span: 10 }}
+			                        label="身份证正面" >
+			                        <PicturesWall
+			                            fileList={this.getPositiveIdUrl}
+			                            pictureUrl={this.state.positiveIdUrl} />
+			                            <p>建议:图片要清晰。</p>
+		                        </FormItem>
+		                        <FormItem style={{display:'inline-block',width:'350px',marginTop:'20px'}}
+			                        labelCol={{ span: 8 }}
+			                        wrapperCol={{ span: 10 }}
+			                        label="身份证反面" > 
+			                        <PicturesWall
+			                            fileList={this.getOppositeIdUrl}
+			                            pictureUrl={this.state.oppositeIdUrl} />
+			                            <p>建议:图片要清晰。</p>
+			                    </FormItem>
+			                    <FormItem style={{display:'inline-block' ,width:'350px',marginTop:'20px'}}
+			                        labelCol={{ span: 8 }}
+			                        wrapperCol={{ span: 10 }}
+			                        label="客户照片" > 
+			                        <PicturesWall
+			                            fileList={this.getHeadPortraitUrl}
+			                            pictureUrl={this.state.headPortraitUrl} />
+			                            <p>建议:图片要清晰。</p>
+			                    </FormItem>
+			                </div> 
+		                    <Button className="setSubmit" type="primary" htmlType="submit">保存</Button>  
+	                        <Button  type="ghost" onClick={this.detailsModal}>取消</Button>
+	                    </div>		                	
+				    </Spin>
+				</Form>		
+			</div>
+		)
+	}
+})
+export default Basic;

+ 166 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/businFollow.jsx

@@ -0,0 +1,166 @@
+import React from 'react';
+import {Form,Button,Spin,message,Modal} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {getCompanyIntention ,getfllowSituation,getcustomerStatue,getContactType} from '@/tools.js';
+const FormItem =Form.Item;
+
+
+const BusinFollow =React.createClass({
+	getInitialState(){
+		return {
+			loading:false
+		}
+	},	
+	businessFollowCancel(){
+		this.setState({
+			businessFollowModul:false
+		})
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.ufbId&&nextProps.businessFollowModul){
+			this.setState({
+				businessFollowModul:true
+			})
+			this.listFollowUp(nextProps.data);
+		}
+	},
+	listFollowUp(e) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/toUpdateFollowOneBusiness",
+			data: {
+				ufbId: e.ufbId
+			},
+			success: function(data) {
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				this.setState({
+					businessGlossoryIds: thedata.businessGlossoryId,
+					followSituations: thedata.followSituation,
+					customerStatuss: thedata.customerStatus,
+					followTimes: thedata.followTime,
+					createTimes: thedata.createTime,
+					identifyNames: thedata.identifyName,
+					contactTypes: parseInt(thedata.contactType),
+					results: thedata.result,
+					remarkss: thedata.remarks,
+					adminNames: thedata.adminName,
+					contactss: thedata.contacts,
+					contactMobiles: thedata.contactMobile,
+					ufbId: thedata.ufbId,
+					followIds: thedata.followId,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	render(){
+		const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+		return(
+			<Modal	
+		      footer=''
+	          title="业务跟进详情"
+	          width='600px'
+	          visible={this.state.businessFollowModul}
+	          onOk={this.businessFollowCancel}
+			  onCancel={this.businessFollowCancel}							          							          
+	        >				    
+			    <div className="clearfix">
+	    			<Form layout="horizontal" id="demand-form">
+	    				<Spin spinning={this.state.loading}>
+	    					<div className="clearfix">
+		    					<FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="意向业务名称" >
+			                        <span>{getCompanyIntention(this.state.businessGlossoryIds)}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="意向时间" >
+			                        <span>{this.state.createTimes}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="客户名称" >
+			                        <span>{this.state.identifyNames}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="营销员" >
+			                        <span>{this.state.adminNames}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="意向业务进度" >
+			                        <span>{getfllowSituation(this.state.followSituations)}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="业务客户状态" >
+			                        <span>{getcustomerStatue(this.state.customerStatuss)}</span>
+			                    </FormItem>
+			                </div>
+		                    <div className="clearfix">
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="业务意向说明" >
+			                        <span>{this.state.remarkss}</span>
+			                    </FormItem>
+	                        </div>
+	                        <div className="clearfix">
+	                        	<div style={{fontSize:'18px',lineHeight:'30px'}}>拜访情况</div>
+	                        	<FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="拜访方式" >
+			                        <span>{getContactType(this.state.contactTypes)}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="联系人" >
+			                        <span>{this.state.contactss}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="联系电话" >
+			                        <span>{this.state.contactMobiles}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="拜访时间" >
+			                        <span>{this.state.followTimes}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="拜访人" >
+			                        <span>{this.state.adminNames}</span>
+			                    </FormItem> 
+			                    <div className="clearfix">
+			                    	<FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="拜访备注" >
+			                        <span>{this.state.results}</span>
+			                    </FormItem>
+			                    </div>
+	                        </div>
+		                </Spin>
+					</Form>                  
+				</div>	                    
+		</Modal>
+		)
+	}
+})
+export default BusinFollow;

+ 153 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/business.jsx

@@ -0,0 +1,153 @@
+import React from 'react';
+import {Form,Button,Spin,message,Table,Popconfirm} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {getfllowSituation,getcustomerStatue} from '@/tools.js';
+import BusinessDetail from './businessDetail.jsx';
+
+const Business = React.createClass({
+	getInitialState(){
+		return{
+			loading:false,
+			dataBusiness:[],
+			followData:{},
+			paginationt: {
+				defaultCurrent: 1,
+				defaultPageSize: 10,
+				showQuickJumper: true,
+				pageSize: 10,
+				onChange: function(page) {
+					this.BusinessList(page, false);
+				}.bind(this),
+				showTotal: function(total) {
+					return '共' + total + '条数据';
+				}
+			},
+			businessIntentionList: [{
+				title: '意向时间',
+				dataIndex: 'createTime',
+				key: 'createTime'
+			}, {
+				title: '客户名称',
+				dataIndex: 'identifyName',
+				key: 'identifyName'
+			}, {
+				title: '业务名',
+				dataIndex: 'businessName',
+				key: 'businessName'
+			}, {
+				title: '营销员',
+				dataIndex: 'adminName',
+				key: 'adminName'
+			}, {
+				title: '业务意向进度',
+				dataIndex: 'followSituation',
+				key: 'followSituation',
+				render: text => { return getfllowSituation(text) }
+			}, {
+				title: '客户状态',
+				dataIndex: 'customerStatus',
+				key: 'customerStatus',
+				render: text => { return getcustomerStatue(text) }
+			}, {
+				title: '操作',
+				dataIndex: 'ooo',
+				key: 'ooo',
+				render: (text, record) => { return(<Button onClick={(e)=>{this.businessIntentionDetails(record)}}>查看</Button>) }
+			}],
+		}
+	},
+	businessIntentionDetails(record){
+		this.setState({
+			followData: record,
+			businessModul:true
+		})
+	},
+	//业务意向
+	BusinessList(pageNo) {
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/listBusiness',
+			data: {
+				pageNo: pageNo || 1,
+				pageSize: this.state.paginationt.pageSize,
+				uid: this.props.data.id
+			},
+			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,
+							businessId: thisdata.businessId,
+							businessName: thisdata.businessName,
+							identifyName: thisdata.identifyName,
+							followSituation: thisdata.followSituation,
+							customerStatus: thisdata.customerStatus,
+							adminName: thisdata.adminName,
+							createTime: thisdata.createTime
+						});
+					};
+					this.state.paginationt.current = data.data.pageNo;
+					this.state.paginationt.total = data.data.totalCount;
+				};
+				if(data.data.list&&!data.data.list.length){
+					this.state.paginationt.current=0;
+					this.state.paginationt.total=0;
+				}
+				this.setState({
+					dataBusiness: theArr,
+					paginationt: this.state.paginationt||[]
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	componentWillMount(){
+		this.BusinessList();
+	},
+	detailsModal(){
+		this.props.closeDetail(false, false)
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.id&&nextProps.businessState){
+			this.BusinessList();
+		}
+		this.setState({
+			businessModul:false
+		})
+	},
+	render(){
+		return(
+			<div className="clearfix">
+			    <Spin spinning={this.state.loading}>
+			      <Table 
+	            	 pagination={this.state.paginationt}
+	            	 columns={this.state.businessIntentionList} 
+	            	 dataSource={this.state.dataBusiness}
+	            	 />
+			    </Spin> 
+			    <BusinessDetail 
+			    	ids={this.props.data.id}
+			    	data={this.state.followData}
+			    	businessModul={this.state.businessModul}
+			    />
+			</div>
+		)
+	}
+})
+
+export default Business;

+ 312 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/businessDetail.jsx

@@ -0,0 +1,312 @@
+import React from 'react';
+import {Form,Button,Spin,message,Table,Popconfirm,Modal} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {getCompanyIntention,getfllowSituation,getcustomerStatue,getContactType } from '@/tools.js';
+const FormItem =Form.Item;
+import BusinFollow from './businFollow.jsx'
+
+const BusinessDetail =React.createClass({
+	getInitialState(){
+		return {
+			loading:false,
+			visitArrList: [],
+			busData:{},
+			paginationst: {
+				defaultCurrent: 1,
+				defaultPageSize: 10,
+				showQuickJumper: true,
+				pageSize: 10,
+				onChange: function(page) {
+					this.loadVisit(page);
+				}.bind(this),
+				showTotal: function(total) {
+					return '共' + total + '条数据';
+				}
+			},
+			businessFollowList: [{
+					title: '跟进时间',
+					dataIndex: 'followTime',
+					key: 'followTime',
+				}, {
+					title: '营销员',
+					dataIndex: 'adminName',
+					key: 'adminName',
+				}, {
+					title: '业务意向进度',
+					dataIndex: 'followSituation',
+					key: 'followSituation',
+					render: text => { return getfllowSituation(text) }
+				}, {
+					title: '客户状态',
+					dataIndex: 'customerStatus',
+					key: 'customerStatus',
+					render: text => { return getcustomerStatue(text) }
+				},
+				{
+					title: '拜访方式',
+					dataIndex: 'contactType',
+					key: 'contactType',
+					render: text => { return getContactType(text) }
+				}, {
+					title: '联系人',
+					dataIndex: 'contacts',
+					key: 'contacts',
+				},
+				{
+					title: '联系电话',
+					dataIndex: 'contactMobile',
+					key: 'contactMobile',
+				}, {
+					title: '操作',
+					dataIndex: 'ooo',
+					key: 'ooo',
+					render: (text, record) => { return(<Button onClick={(e)=>{this.businessFollowDetails(record)}}>查看</Button>) }
+				}
+			],
+		}
+	},
+	//业务跟进查看跟多
+	businessFollowDetails(e) {
+		this.setState({
+			busData:e,
+			businessFollowModul: true
+		})
+	},
+	listFollowUp(e) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/toUpdateFollowOneBusiness",
+			data: {
+				ufbId: e
+			},
+			success: function(data) {
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				this.setState({
+					businessGlossoryIds: thedata.businessGlossoryId,
+					followSituations: thedata.followSituation,
+					customerStatuss: thedata.customerStatus,
+					followTimes: thedata.followTime,
+					createTimes: thedata.createTime,
+					identifyNames: thedata.identifyName,
+					contactTypes: parseInt(thedata.contactType),
+					results: thedata.result,
+					remarkss: thedata.remarks,
+					adminNames: thedata.adminName,
+					contactss: thedata.contacts,
+					contactMobiles: thedata.contactMobile,
+					ufbId: thedata.ufbId,
+					followIds: thedata.followId,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//查看跟进记录列表
+	loadVisit(pageNo) {
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/listFollowHistory',
+			data: {
+				pageNo: pageNo || 1,
+				pageSize: this.state.paginationst.pageSize,
+				uid: this.props.ids, //名称1
+				businessGlossoryId: this.state.businessGlossoryId,
+			},
+			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({
+							followId: thisdata.followId,
+							followTime: thisdata.followTime,
+							identifyName: thisdata.identifyName,
+							contacts: thisdata.contacts,
+							contactMobile: thisdata.contactMobile,
+							result: thisdata.result,
+							ufbId: thisdata.ufbId,
+							adminName: thisdata.adminName,
+							followSituation: thisdata.followSituation,
+							customerStatus: thisdata.customerStatus,
+							contactType: thisdata.contactType
+						});
+					};
+					this.state.paginationst.current = data.data.pageNo;
+					this.state.paginationst.total = data.data.totalCount;
+				};
+				if(data.data.list&&!data.data.list.length){
+					this.state.paginationst.current = 0;
+					this.state.paginationst.total = 0;
+				};
+				this.setState({
+					visitArrList: theArr,
+					paginationst: this.state.paginationst
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	businessIntentionDetails(e) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/toUpdateBusiness',
+			data: {
+				businessId: e.businessId
+			},
+			success: function(data) {
+				let thisData = data.data;
+				if(!thisData) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thisData = {};
+				};
+				this.setState({
+					businessGlossoryId: thisData.businessGlossoryId,
+					identifyName: thisData.identifyName,
+					uid: thisData.uid,
+					businessId: thisData.businessId,
+					followSituation: thisData.followSituation,
+					customerStatus: thisData.customerStatus,
+					createTime: thisData.createTime,
+					followTime: thisData.followTime,
+					adminName: thisData.adminName,
+					remarks: thisData.remarks,
+					result: thisData.result,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.loadVisit();
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+		this.setState({
+			businessModul: true
+		})
+	},
+	businessIntentionCancel(){
+		this.setState({
+			businessFollowModul:false,
+			businessModul:false
+		})
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.businessId&&nextProps.businessModul&&nextProps.ids){
+			this.setState({
+				businessModul:true
+			})
+			this.businessIntentionDetails(nextProps.data);
+		}
+		this.setState({
+			businessFollowModul:false
+		})
+	},
+	render(){
+		const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+		return(
+			<div>
+				<Modal	
+				      footer=''
+			          title="业务意向详情"
+			          width='1000px'
+			          visible={this.state.businessModul}
+			          onOk={this.businessIntentionCancel}
+					  onCancel={this.businessIntentionCancel}							          							          
+			        >				    
+					    <div className="clearfix">
+			    			<Form layout="horizontal" id="demand-form" onSubmit={this.passworldSubmit}>
+			    				<Spin spinning={this.state.loading}>
+			    					<div className="clearfix">
+				    					<FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="意向业务名称" >
+					                        <span>{getCompanyIntention(this.state.businessGlossoryId)}</span>
+					                    </FormItem>
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="意向时间" >
+					                        <span>{this.state.createTime}</span>
+					                    </FormItem>
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="客户名称" >
+					                        <span>{this.state.identifyName}</span>
+					                    </FormItem>
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="营销员" >
+					                        <span>{this.state.adminName}</span>
+					                    </FormItem>
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="意向业务进度" >
+					                        <span>{getfllowSituation(this.state.followSituation)}</span>
+					                    </FormItem>
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="业务客户状态" >
+					                        <span>{getcustomerStatue(this.state.customerStatus)}</span>
+					                    </FormItem>
+					                </div>
+				                    <div className="clearfix">
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="业务意向说明" >
+					                        <span>{this.state.remarks}</span>
+					                    </FormItem>
+			                        </div>
+			                        <div className="clearfix">
+			                        	<div style={{fontSize:'18px',lineHeight:'24px',marginBottom:'10px'}}>业务跟进</div>
+			                        	<div className="clearfix">
+		                    			    <Spin spinning={this.state.loading}>
+										      <Table 
+								            	 pagination={this.state.paginationst}
+								            	 columns={this.state.businessFollowList} 
+								            	 dataSource={this.state.visitArrList}
+								            	 />
+										    </Spin> 
+										</div>	
+			                        </div>
+				                </Spin>
+							</Form>                  
+						</div>	                    
+    			</Modal>
+    			<BusinFollow 
+    				data={this.state.busData}
+    				businessFollowModul={this.state.businessFollowModul}
+    			/>
+			</div>
+		)
+	}
+});
+export default BusinessDetail;

+ 274 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/contactPerson.jsx

@@ -0,0 +1,274 @@
+import React from 'react';
+import {Form,Table,Button,Spin,message,Input,Popconfirm,Col} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+const ContactPerson = React.createClass({
+	getInitialState() {
+		return {
+			contactList:[],
+			loading:false,
+			ContactsLists: [{
+					title: '姓名',
+					dataIndex: 'name',
+					key: 'name',
+					render: (text, record, index) => {
+						return <Input value={record.name} placeholder="姓名(必填项)" key={record.id} required="required"
+	                           onChange={(e) => { record.name = e.target.value; 
+	                           	this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+					title: '联系人部门',
+					dataIndex: 'depatrment',
+					key: 'depatrment',
+					render: (text, record, index) => {
+						return <Input value={record.depatrment} placeholder="联系人部门" key={record.id}
+	                   onChange={(e) => { record.depatrment = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+					title: '联系人职务',
+					dataIndex: 'position',
+					key: 'position',
+					render: (text, record, index) => {
+						return <Input value={record.position} placeholder="联系人职务" key={record.id}
+	                  onChange={(e) => { record.position = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+                    title: '主要联系人',
+                    dataIndex: 'major',
+                    width:100,
+                    key: 'major',
+                    render:(text) => {
+                    	return text?'是':"否"
+                    }
+                },{
+					title: '手机号码',
+					dataIndex: 'mobile',
+					key: 'mobile',
+					render: (text, record, index) => {
+						return <Input value={record.mobile} placeholder="手机号码(必填项)" key={record.id} required="required"
+	                  onChange={(e) => { record.mobile = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+					title: '微信',
+					dataIndex: 'wechat',
+					key: 'wechat',
+					render: (text, record, index) => {
+						return <Input value={record.wechat} placeholder="微信" key={record.id}
+	                  onChange={(e) => { record.wechat = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+					title: '联系人QQ',
+					dataIndex: 'qq',
+					key: 'qq',
+					render: (text, record, index) => {
+						return <Input value={record.qq} placeholder="联系人QQ" key={record.id}
+	                  onChange={(e) => { record.qq = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+					title: '电子邮箱',
+					dataIndex: 'email',
+					key: 'email',
+					render: (text, record, index) => {
+						return <Input value={record.email} placeholder="电子邮箱" key={record.id}
+	                  onChange={(e) => { record.email = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				},
+				{
+					title: '操作',
+					dataIndex: 'dels',
+					key: 'dels',
+					render: (text, record, index) => {
+						return <div>{adminData.isSuperAdmin ? 
+		                            <Popconfirm title="是否删除?" onConfirm={(e)=>{this.confirmDelet(record)}} okText="删除" cancelText="不删除">
+									    <Button style={{marginRight:'10px',color:'#ffffff',background:'#f00',border:'none'}}>删除</Button>
+									</Popconfirm>
+									:''}
+								{record.name?<Button style={{marginRight:'10px',color:'#ffffff',background:'green',border:'none'}} onClick={(e)=>{e.stopPropagation(),this.mainContact(record)}}>设为主要联系人</Button>:''}
+                            </div>
+					}
+				}
+			],
+		}
+	},
+	//tab2删除
+	confirmDelet(e) {
+		this.setState({
+			loading: true
+		});
+		if(e.id) {
+			$.ajax({
+				method: "get",
+				dataType: "json",
+				crossDomain: false,
+				url: globalConfig.context + "/api/admin/customer/deleteOneContact",
+				data: {
+					ocbId: e.id, //删除的ID    
+				}
+			}).done(function(data) {
+				if(!data.error.length) {
+					message.success('删除成功!');
+					this.setState({
+						loading: false,
+					});
+				} else {
+					message.warning(data.error[0].message);
+				};
+				this.contactLists();
+			}.bind(this));
+		} else {
+			this.contactLists();
+		}
+	},
+	//选择主要联系人
+	mainContact(record){
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/updateMainContact",
+			data: {
+				uid:this.props.data.id,
+				ocbId: record.id 
+			}
+		}).done(function(data) {
+			if(!data.error.length) {
+				message.success('设为主要联系人成功!');
+				this.setState({
+					loading: false,
+				});
+			} else {
+				message.warning(data.error[0].message);
+			};
+			this.contactLists();
+		}.bind(this));
+	},
+	//tab2获取联系人详情
+	contactLists(ids) {
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/findCustomerContacts',
+			data: {
+				uid: ids||this.props.data.id, //名称1
+			},
+			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({
+							id: thisdata.id,
+							name: thisdata.name,
+							mobile: thisdata.mobile,
+							email: thisdata.email,
+							qq: thisdata.qq,
+							wechat: thisdata.wechat,
+							depatrment: thisdata.depatrment,
+							position: thisdata.position,
+							major:thisdata.major
+						});
+					};
+
+				};
+				this.setState({
+					contactList: theArr,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//新增
+	//tab2新增联系人
+	addcontact() {
+		this.state.contactList.push({
+			id: null,
+			name: '',
+			mobile: '',
+			email: '',
+			qq: '',
+			wechat: '',
+			depatrment: '',
+			position: '',
+		});
+
+		this.setState({
+			contactList: this.state.contactList
+		})
+	},	
+	//tab2联系人保存
+	contactSave(e) {
+		e.preventDefault();
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			url: globalConfig.context + '/api/admin/customer/updateCustomerContacts',
+			method: 'post',
+			data: {
+				uid: this.props.data.id,
+				contactList: JSON.stringify(this.state.contactList)
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDetail(false,true)
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+	},
+	componentWillMount(){
+		this.contactLists(this.props.data.id);
+	},
+	detailsModal(){
+		this.props.closeDetail(false, false)
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.id&&nextProps.contactState){
+			this.contactLists(nextProps.data.id)
+		}
+	},
+	render() {
+		return(
+			<div>
+			    <div className="clearfix" >
+					 <Button className="ContactsList" type="primary" onClick={this.addcontact}>新增</Button> 
+				</div>
+		       <div className="clearfix">
+    			  <Spin spinning={this.state.loading}>
+    			        <Form layout="horizontal" id="demand-form" onSubmit={this.contactSave} >
+					      	<Table 
+			            	 pagination={false}
+			            	 columns={this.state.ContactsLists} 
+			            	 dataSource={this.state.contactList}
+			            	 />
+	            	        <Col span={24} offset={9} style={{marginTop:'15px'}}>
+				                <Button  type="primary" htmlType="submit">保存</Button>  
+                                <Button  type="ghost" onClick={this.detailsModal} style={{marginLeft:'100px'}}>取消</Button>
+				            </Col>
+		            	</Form> 
+				   </Spin> 
+				</div>
+			</div>
+		)
+	}
+})
+export default ContactPerson;

+ 198 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/visit.jsx

@@ -0,0 +1,198 @@
+import React from 'react';
+import {Form,Button,Spin,message,Table,Popconfirm} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {getContactType} from '@/tools.js';
+import VisitDetail from './visitDetail.jsx';
+
+const Visit = React.createClass({
+	getInitialState(){
+		return{
+			visitArrList:[],
+			loading:false,
+			visitModul:false,
+			paginations: {
+				defaultCurrent: 1,
+				defaultPageSize: 10,
+				showQuickJumper: true,
+				pageSize: 10,
+				onChange: function(page) {
+					this.loadVisit(page);
+				}.bind(this),
+				showTotal: function(total) {
+					return '共' + total + '条数据';
+				}
+			},
+			visitsList: [{
+				title: '拜访时间',
+				dataIndex: 'followTime',
+				key: 'followTime'
+			}, {
+				title: '客户名称',
+				dataIndex: 'identifyName',
+				key: 'identifyName'
+			}, {
+				title: '拜访方式',
+				dataIndex: 'contactType',
+				key: 'contactType',
+				render: text => { return getContactType(text) }
+			}, {
+				title: '联系人',
+				dataIndex: 'contacts',
+				key: 'contacts'
+			}, {
+				title: '联系电话',
+				dataIndex: 'contactMobile',
+				key: 'contactMobile'
+			}, {
+				title: '拜访人',
+				dataIndex: 'adminName',
+				key: 'adminName'
+			}, {
+				title: '拜访说明',
+				dataIndex: 'result',
+				key: 'result'
+			}, {
+				title: '操作',
+				dataIndex: 'ttt',
+				key: 'ttt',
+				render: (text, record, index) => {
+					return <div>
+                            <Popconfirm title="是否删除?" onConfirm={(e)=>{this.visitDelet(record)}} okText="删除" cancelText="不删除">
+							    <Button style={{marginRight:'10px',color:'#ffffff',background:'#f00',border:'none'}} onClick={(e)=>{e.stopPropagation()}}>删除</Button>
+							</Popconfirm>
+                        </div>
+				}
+			}],
+		}
+	},
+	//拜访记录删除
+	visitDelet(e) {
+		this.setState({
+			visitModul:false,
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/deleteFollow",
+			data: {
+				followId: e.followId, //删除的ID    
+			}
+		}).done(function(data) {
+			if(!data.error.length) {
+				message.success('删除成功!');
+				this.setState({
+					loading: false,
+				});
+			} else {
+				message.warning(data.error[0].message);
+			};
+			this.loadVisit();
+		}.bind(this));
+	},
+	//查看跟进记录列表
+	loadVisit(pageNo) {
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/listFollowHistory',
+			data: {
+				pageNo: pageNo || 1,
+				pageSize: this.state.paginations.pageSize,
+				uid: this.props.data.id, //名称1
+			},
+			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({
+							followId: thisdata.followId,
+							followTime: thisdata.followTime,
+							identifyName: thisdata.identifyName,
+							contacts: thisdata.contacts,
+							contactMobile: thisdata.contactMobile,
+							result: thisdata.result,
+							adminName: thisdata.adminName,
+							followSituation: thisdata.followSituation,
+							customerStatus: thisdata.customerStatus,
+							contactType: thisdata.contactType
+						});
+					};
+					this.state.paginations.current = data.data.pageNo;
+					this.state.paginations.total = data.data.totalCount;
+				};
+				if(data.data.list&&!data.data.list.length){
+					this.state.paginations.current =0;
+					this.state.paginations.total =0;
+				};
+				this.setState({
+					visitArrList: theArr,
+					paginations: this.state.paginations
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	componentWillMount(){
+		this.loadVisit();
+	},
+	detailsModal(){
+		this.props.closeDetail(false, false)
+	},
+	//点击整行
+	VisitRowClick(record){
+		this.setState({
+			followData: record,
+			visitModul:true,
+		})
+	},
+	closeDesc(e,s){
+		this.state.visitModul=e
+		if(s){
+			this.loadVisit()
+		}
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.id&&nextProps.visitState){
+			this.loadVisit()
+		}
+		this.setState({
+			visitModul:false
+		})
+	},
+	render(){
+		return(
+			<div className="clearfix">
+			    <Spin spinning={this.state.loading}>
+			      <Table 
+	            	 pagination={this.state.paginations}
+	            	 columns={this.state.visitsList} 
+	            	 dataSource={this.state.visitArrList}
+	            	 onRowClick={this.VisitRowClick}
+	            	 />
+			    </Spin> 
+			    <VisitDetail 
+			    	categoryArr={this.props.categoryArr}
+			    	followData={this.state.followData}
+			    	visitModul={this.state.visitModul}
+			    	closeDesc={this.closeDesc}
+			    />
+			</div>	
+		)
+	}
+})
+export default Visit;

+ 400 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/visitDetail.jsx

@@ -0,0 +1,400 @@
+import React from 'react'
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {Modal,Form,layout,Radio,Button,Input,Spin,Table,Select,Popconfirm,message} from 'antd';
+import {intentionalService,newFollow,customerStatus} from '@/dataDic.js';
+import {getCompanyIntention} from '@/tools.js';
+const FormItem =Form.Item;
+import BusName from '../../followDetail/businessName.jsx';
+
+const VisitDetail = React.createClass({
+	getInitialState(){
+		return{
+			visitModul:false,
+			loading:false,
+			data:[],
+			//业务意向列表
+			intentionList: [{
+					title: '业务名称',
+					dataIndex: 'businessGlossoryId',
+					width:120,
+					key: 'businessGlossoryId',
+					render: (text, record, index) => {
+						return (
+							<div>
+								{!record.id?<Select  placeholder="选择业务名称"  value={record.businessGlossoryId}  onChange={(e) => { record.businessGlossoryId = e; this.setState({ data: this.state.data }); }}>
+                                    {
+                                        this.props.categoryArr.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                    }
+                               </Select>:
+                               <span>{record.businessVarietiesName}</span>}
+							</div>
+						)
+					}
+				},
+				{
+					title: '项目名称',
+					dataIndex: 'businessName',
+					key:'businessName',
+					width:200,
+					render:(text,record,index)=>{
+						return(
+							<div>
+								{!record.id?<div>
+									<Button onClick={(e)=>{e.stopPropagation(),this.businessFn(record,index)}} type="small">{record.projectName}</Button>
+								</div>:
+								<span>{record.businessProjectName}</span>
+								}
+							</div>
+							)
+						}
+				},
+				{
+					title: '最新进度',
+					width:120,
+					dataIndex: 'followSituation',
+					key: 'followSituation',
+					render: (text, record, index) => {
+						return <Select  placeholder="选择最新进度" value={record.followSituation}  onChange={(e) => { record.followSituation = e; this.setState({ data: this.state.data }); }}>
+                                    {
+                                        newFollow.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                    }
+                               </Select>
+					}
+				}, {
+					title: '最新状态',
+					width:120,
+					dataIndex: 'customerStatus',
+					key: 'customerStatus',
+					render: (text, record, index) => {
+						return <Select value={record.customerStatus} placeholder="选择最新状态" onChange={(e) => { record.customerStatus = e; this.setState({ data: this.state.data }); }}>
+                                    {
+                                        customerStatus.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                    }
+                               </Select>
+					}
+				}, {
+					title: '跟进说明',
+					width:180,
+					dataIndex: 'remarks',
+					key: 'remarks',
+					render: (text, record, index) => {
+						return <Input value={record.remarks} placeholder="跟进说明" 
+	                             onChange={(e) => { record.remarks = e.target.value; this.setState({ data: this.state.data }); }}
+	                             style={{width:'120px'}}/>
+					}
+				}, {
+					title: '操作',
+					dataIndex: 'rrr',
+					key: 'rrr',
+					render: (text, record, index) => {
+						return <div>
+                            <Popconfirm title="是否删除?" onConfirm={(e)=>{this.intentionDelet(record,index)}} okText="删除" cancelText="不删除">
+							    <Button style={{marginRight:'10px',color:'#ffffff',background:'#f00',border:'none'}}>删除</Button>
+							</Popconfirm>
+                        </div>
+					}
+				}
+			],
+		}
+	},
+	//选择子项目
+	businessFn(record,index){
+		if(!record.businessGlossoryId){
+			message.warn('请先选择业务名称!');
+			return;
+		}
+		this.setState({
+			businessId:record.businessGlossoryId,
+			busModul:true,
+			index:index,
+			addcontactModul:false
+		})
+	},
+	closeBus(datas,e,s){
+		this.state.addcontactModul=e;
+		this.state.busModul=false;
+		if(s){
+			this.state.data[this.state.index].businessName=datas.id;
+			this.state.data[this.state.index].projectName=datas.name;
+			this.setState({
+				busModul:false,
+				data:this.state.data
+			})
+		}
+	},
+	//进入修改拜访记录  
+	visitModify(e) {
+		this.setState({
+			visitModul: true,
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/toUpdateFollow',
+			data: {
+				followId: e,
+			},
+			success: function(data) {
+				let theArr = [];
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				if(thedata&&thedata.userBusinessList){
+					for(let i = 0; i < data.data.userBusinessList.length; i++) {
+						let thisdata = data.data.userBusinessList[i];
+						theArr.push({
+							id: thisdata.ufbId,
+							businessName:thisdata.businessProjectId,
+							businessGlossoryId:i,
+							businessVarietiesName:thisdata.businessVarietiesName,
+							businessProjectName:thisdata.businessProjectName,
+							followSituation: String(thisdata.followSituation),
+							customerStatus: String(thisdata.customerStatus),
+							remarks: thisdata.remarks,
+						});
+					}
+				};
+				this.setState({
+					followIds: thedata.followId,
+					contacts: thedata.contacts,
+					contactMobile:thedata.contactMobile,
+					uid: thedata.uid,
+					data: theArr,
+					result: thedata.result,
+					contactType: parseInt(thedata.contactType),
+					followTime:thedata.followTime
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//拜访意向服务列表单个删除
+	intentionDelet(e, index) {
+		let detId = this.state.followIds;
+		if(e.id) {
+			this.setState({
+				selectedRowKeys: [],
+			});
+			$.ajax({
+				method: "get",
+				dataType: "json",
+				crossDomain: false,
+				url: globalConfig.context + "/api/admin/customer/deleteFollowOneBusiness",
+				data: {
+					ufbId: e.id
+				}
+			}).done(function(data) {
+				if(!data.error.length) {
+					message.success('删除成功');
+					this.setState({
+						loading: false,
+					});
+				} else {
+					message.warning(data.error[0].message);
+				};
+				this.visitModify(detId);
+			}.bind(this));
+		} else {
+			this.visitModify(detId);
+		}
+	},
+	//拜访modul函数
+	visitOk(e) {
+		this.setState({
+			addcontactModul:false,
+			visitModul: false
+		});
+	},
+	visitCancel(e) {
+		this.setState({
+			addcontactModul:false,
+			visitModul: false
+		});
+	},
+	
+	//详情保存
+	visitSubmit(e){
+		e.preventDefault();
+		let GlossoryId=false;
+		this.state.data.map(function(item) {
+			if(!item.followSituation||!item.customerStatus||!item.businessName) {
+				GlossoryId = true
+			}
+		})
+		if(GlossoryId) {
+			message.warning("业务名称/项目名称/最新进度/最新状态不能为空!")
+			return false;
+		};
+	   let dataList=this.state.data,
+			idsList=[];
+		dataList.map((item,index) => {
+			idsList.push({
+				ufbId:item.id||'',
+				businessProjectId:item.businessName,
+				customerStatus:item.customerStatus,
+				followSituation:item.followSituation,
+				remarks:item.remarks||''
+			})
+		});
+		this.setState({
+			loading: true
+		});
+		//新增
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/updateFollow',
+			data: {
+				followId: this.state.followIds,
+				userBusinessList: JSON.stringify(idsList),
+				uid: this.state.uid,
+				contactType: this.state.contactType,
+				result: this.state.result,
+				followTime: this.state.followTime,
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDesc(false,true);
+				this.visitCancel();
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+
+	},
+	//添加新业务
+	addNew(){
+		this.state.data.push({
+			projectName:'选择',
+			businessName:'',
+			customerStatus: undefined,
+			businessGlossoryId: undefined,
+			followSituation: undefined,
+			remarks: '',
+		});
+		this.setState({
+			addcontactModul:false,
+			data: this.state.data
+		})
+	},
+	componentWillReceiveProps(nextProps) {
+        if (nextProps.visitModul && nextProps.followData.followId) {
+            this.setState({
+				visitModul: true,
+				loading: true,
+			})
+			this.visitModify(nextProps.followData.followId)
+        };
+    },
+	render() {
+		const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+		return(
+			<div>
+				<Modal	
+				      className="customeDetails"
+				      footer=''
+			          title="客户跟进详情"
+			          width='1000px'
+			          visible={this.state.visitModul}
+			          onOk={this.visitOk}
+					  onCancel={this.visitCancel}							          							          
+			        >				    
+					    <Form layout="horizontal" id="demand-form" onSubmit={this.visitSubmit}>
+			    			<Spin spinning={this.state.loading}>
+			    			   	<div className="clearfix">
+			    			   		<FormItem 
+			                            labelCol={{ span:4 }}
+										wrapperCol={{ span: 20 }}
+			                            label="拜访方式" >
+			    			   			<Radio.Group value={this.state.contactType} onChange={(e) => {
+										        this.setState({ contactType: e.target.value }) 
+						                    }}>
+						                        <Radio value={0}>外出</Radio>
+						                        <Radio value={1}>电话</Radio>
+						                        <Radio value={2}>QQ</Radio>
+						                        <Radio value={3}>微信</Radio>
+						                        <Radio value={4}>邮箱</Radio>
+						                </Radio.Group>
+					                </FormItem>
+					                <div className="clearfix">
+						                <FormItem className="half-item"
+				                            {...formItemLayout}
+				                             label="当前联系人"
+				                             >
+						                    <span>{this.state.contacts}</span>
+						                </FormItem>
+						                <FormItem className="half-item"
+				                            {...formItemLayout}
+				                             label="跟进时间"
+				                             >
+						                	<span>{this.state.followTime}</span>
+						                </FormItem>
+						                <FormItem className="half-item"
+				                            {...formItemLayout}
+				                             label="联系电话"
+				                             >
+						                	<span>{this.state.contactMobile}</span>
+						                </FormItem>
+					                </div>
+					                <div className="clearfix">
+					                	<FormItem
+					                        labelCol={{ span: 4 }}
+							                wrapperCol={{ span: 16 }}
+					                        label="跟进备注" >
+					                            <Input type="textarea" rows={4} value={this.state.result} 
+					                              onChange={(e)=>{this.setState({result:e.target.value})}}/>
+					                    </FormItem>
+					                </div>
+					                <div className="clearfix">
+					                 	<div style={{fontSize:'18px',marginLeft:'100px',marginTop:'15px',marginBottom:'10px'}}>业务意向<Button onClick={this.addNew} style={{marginLeft:'420px',background:'green',color:'#ffffff'}}>添加新业务</Button></div>
+					                 	<div className="clearfix" >
+		                    			    <Spin spinning={this.state.loading}>
+										      <Table 
+										         rowKey={record => record.id}
+								            	 pagination={false}
+								            	 columns={this.state.intentionList} 
+								            	 dataSource={this.state.data}
+								            	 />
+										    </Spin> 
+										</div>	 
+					                </div>
+			    			   	</div>
+			    			   	<FormItem wrapperCol={{ span: 12, offset: 6 }}>
+								    <Button  type="primary" size="large" htmlType="submit" style={{marginRight:'150px',marginTop:'20px'}}>保存</Button>
+						           	<Button  size="large" onClick={this.visitCancel}>取消</Button>
+					   			</FormItem>
+					   		</Spin>
+					    </Form>
+				</Modal> 
+				<BusName 
+					businessId={this.state.businessId}
+					busModul={this.state.busModul}
+					closeBus={this.closeBus}
+				/>
+			</div>
+		)
+	}
+})
+export default VisitDetail;

+ 228 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/intentionDetail.jsx

@@ -0,0 +1,228 @@
+import React from 'react';
+import {Modal,Tabs  } from 'antd';
+const TabPane = Tabs.TabPane;
+import Basic from './detail/basic.jsx';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import ContactPerson from './detail/contactPerson.jsx';  //联系人
+import Account from './detail/account.jsx';  //账户信息
+import Visit from './detail/visit.jsx'; 
+import Business from './detail/business.jsx';
+import BasicPerson from './detail/basicPerson.jsx';
+
+const IntentionDetail = React.createClass({
+	getInitialState(){
+		return{
+			modalVisible:false,
+			switchState:false,
+			contactData:[],
+			contactState:false,
+			IntentionState:false,
+			businessState:false,
+			visitState:false,
+			accountState:false,
+			basicState:false
+		}
+	},
+	detailsModal(){
+		this.setState({
+			basicState:false,
+			modalVisible:false
+		})
+		this.props.closeDesc(false,false)
+	},
+	//详情tab切换数据处理
+	callback(e) {
+		if(e == '1') {
+			this.setState({
+				contactState:false,
+				IntentionState:true,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:true
+			})
+		}
+		if(e == '2') {
+			this.setState({
+				IntentionState:false,
+				contactState:true,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '3') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:true,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '4') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:true,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '5') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:false,
+				businessState:true,
+				basicState:false
+			})
+		}
+		/*if(e == '6') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '7') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '8') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '9') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}*/
+		this.setState({
+			callnub: e,
+		})
+	},
+	//取消函数
+	closeDetail(e,s){
+		this.setState({
+			basicState:false,
+			modalVisible:e,
+		})
+		if(s){
+			this.props.closeDesc(false,true)
+		}
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.modalVisible && nextProps.IntentionData.id) {
+			this.setState({
+				modalVisible:true,
+				callnub:'1',
+			})
+		};
+		this.setState({
+			basicState:nextProps.basicState
+		})
+	},
+	render(){
+		return(
+			<div>
+				 <Modal	
+				      className="customeDetails"				      
+			          title="意向客户详情"
+			          width='1300px'
+			          visible={this.state.modalVisible}
+			          onOk={this.detailsModal}
+			          onCancel={this.detailsModal}
+			          footer=''
+			        >				    
+					     <Tabs onChange={this.callback} activeKey={this.state.callnub}>
+						    <TabPane tab="基本信息" key="1">
+						        {this.props.detailApi.indexOf('Organization')>0?<Basic 
+						        	detailApi={this.props.detailApi}
+						        	closeDetail={this.closeDetail}
+						        	data={this.props.IntentionData}
+						        	IntentionState={this.state.IntentionState}
+						        	basicState={this.state.basicState}
+						        />:<BasicPerson 
+						        	detailApi={this.props.detailApi}
+						        	closeDetail={this.closeDetail}
+						        	data={this.props.IntentionData}
+						        	IntentionState={this.state.IntentionState}
+						        	basicState={this.state.basicState}
+						        />
+						       }
+							</TabPane>
+						    <TabPane tab="联系人信息" key="2">
+						        <ContactPerson 
+							        closeDetail={this.closeDetail}
+							        data={this.props.IntentionData}
+							        contactState={this.state.contactState}
+							    />
+						    </TabPane>
+						    <TabPane tab="账户信息" key="3">
+						    		<Account 
+						    			 closeDetail={this.closeDetail}
+								         data={this.props.IntentionData}
+								         accountState={this.state.accountState}
+						    		/>
+						    </TabPane>
+							<TabPane tab="客户拜访" key="4">
+							     <Visit
+							     		categoryArr={this.props.categoryArr}
+							     		closeDetail={this.closeDetail}
+								        data={this.props.IntentionData}
+								        visitState={this.state.visitState}
+							     />
+							</TabPane>						
+							<TabPane tab="业务意向" key="5">
+							    <Business 
+							    	closeDetail={this.closeDetail}
+								    data={this.props.IntentionData}
+								    businessState={this.state.businessState}
+							    />
+							</TabPane>
+							{/*<TabPane tab="业务订单" key="6">
+							     	<div style={{textAlign:'center'}}></div>							
+							</TabPane>
+							<TabPane tab="技术需求" key="7">
+							     								
+							</TabPane>
+							<TabPane tab="技术成果" key="8">
+							     								
+							</TabPane>
+							<TabPane tab="技术专家" key="9">
+							     								
+							</TabPane>
+							*/}
+						</Tabs>
+    			</Modal>
+			</div>
+		)
+	}
+})
+export default IntentionDetail;

+ 235 - 0
js/component/manageCenter/customer/NEW/publicCustomer/publicCustomer.jsx

@@ -0,0 +1,235 @@
+import React from 'react';
+import { Button,Cascader,Input, Select, Spin, Table, message, Form } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import { citySelect, provinceList } from '@/NewDicProvinceList';
+
+const QueryCustomer = React.createClass({
+	loadData(pageNo, apiUrl) {
+		this.setState({
+			loading: true,
+			ispage:pageNo,
+		});
+		let api=apiUrl?apiUrl:this.props.ApiUrl;
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + api,
+			data: {
+				pageNo: pageNo || 1,
+				pageSize: this.state.pagination.pageSize,
+				name: this.state.nameSearch,
+				province: !(this.state.addressSearch).length ? this.state.provinceSearch : this.state.addressSearch[0],
+				city: !(this.state.addressSearch).length ? '' : this.state.addressSearch[1],
+			},
+			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.uid,
+							name: thisdata.name,
+							contacts: thisdata.contacts,
+							contactMobile: thisdata.contactMobile,
+							createTime:thisdata.createTime&&thisdata.createTime.split(' ')[0],
+							transferTime:thisdata.transferTime&&thisdata.transferTime.split(' ')[0],
+							locationProvince: thisdata.province ? thisdata.province + '-' + thisdata.city + '-' + thisdata.area : '--'
+						});
+					};
+					this.state.pagination.current = data.data.pageNo;
+				    this.state.pagination.total = data.data.totalCount;
+				};
+				if(data.data&&data.data.list&&!data.data.list.length){
+					this.state.pagination.current=0;
+					this.state.pagination.total=0;
+				}
+				this.setState({
+					dataSource: theArr,
+					pagination: this.state.pagination,
+					selectedRowKeys:[]
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	getInitialState(){
+		return {
+			addressSearch: [],
+			dataSource:[],
+			loading:false,
+			selectedRowKeys: [],
+			selectedRows:[],
+			selectedData:[],
+			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: 'name',
+					key: 'name',
+				}, {
+					title: '地区',
+					dataIndex: 'locationProvince',
+					key: 'locationProvince',
+				},{
+					title: '联系人',
+					dataIndex: 'contacts',
+					key: 'contacts',
+				},{
+					title: '联系电话',
+					dataIndex: 'contactMobile',
+					key: 'contactss',
+				},
+				{
+					title: '创建时间',
+					dataIndex: 'createTime',
+					key: 'createTime',
+				},
+				{
+					title: '转换时间',
+					dataIndex: 'transferTime',
+					key: 'transferTime',
+				}, 
+				{
+					title: '操作',
+					dataIndex: 'abc',
+					key: 'abc',
+					render: (text, record, index) => {
+						return <div>
+                            <Button onClick={(e) =>{ e.stopPropagation(), this.receive(record)}} type="primary">领取</Button>                            							    
+                        </div>
+					}
+				}
+			],
+		}
+	},
+	/*单个领取*/
+	receive(e) {
+		this.setState({
+			loading: true,
+			selectedRowKeys: [],
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/receiveCustomer",
+			data: {
+				uid: e.id,
+				oldAid:e.aid
+			}
+		}).done(function(data) {
+			if(!data.error.length) {
+				message.success('领取成功!');
+				this.setState({
+					loading: false,
+				});
+			} else {
+				message.warning(data.error[0].message);
+			};
+			this.loadData(this.state.ispage);
+		}.bind(this));
+	},
+	closeDesc(e) {
+		this.state.visitModul = e;
+	},
+	search() {
+		this.loadData();
+	},
+	reset() {
+		this.state.nameSearch='';
+		this.state.provinceSearch=undefined;
+		this.state.addressSearch=[];
+		this.loadData()
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.ApiUrl!=this.props.ApiUrl) {
+			this.loadData(null,nextProps.ApiUrl);
+		};
+	},
+	componentWillMount() {
+		//城市
+		let Province = [];
+		provinceList.map(function(item) {
+			var id = String(item.id)
+			Province.push(
+				<Select.Option value={id} key={item.name}>{item.name}</Select.Option>
+			)
+		});
+		this.state.Provinces = Province;
+		this.loadData();
+	},
+	render(){
+		const intentionState=this.props.intentionState;
+		const FormItem = Form.Item;
+		const rowSelection = {
+			selectedRowKeys: this.state.selectedRowKeys,
+			onChange: (selectedRowKeys, selectedRows) => {
+				this.setState({
+					selectedRows:selectedRows,
+					selectedRowKeys: selectedRowKeys
+				});
+			},
+			onSelect: (recordt, selected, selectedData) => {
+				this.setState({
+					selectedData:selectedData,
+					recordt: recordt.id
+				})
+			},
+			
+		};
+		return(
+			<div className="user-content" >
+                <div className="content-title">                  
+                    <span>{!intentionState?'单位公共客户':'个人公共客户'}</span>
+                </div>
+                <div className="user-search">                    
+                    <Input placeholder="客户名称"
+                        value={this.state.nameSearch}
+                        onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />    
+                    <Select placeholder="省"
+                            style={{ width: 80 }}
+                            value={this.state.provinceSearch}
+                            onChange={(e) => {this.setState({ provinceSearch: e});}}>
+                            {this.state.Provinces}
+                    </Select> 
+                    <span style={{marginRight:'10px'}}>                   
+	                     <Cascader options={citySelect()}  value={this.state.addressSearch} placeholder="选择城市"
+    						onChange={(e,pre) => { this.setState({ addressSearch: e }) }} />	                 
+                    </span>
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button> 
+                </div>  
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}    
+                            rowSelection={rowSelection}
+                            pagination={this.state.pagination} 
+                           />
+                    </Spin>
+                </div> 
+            </div>    
+		)
+	}
+})
+export default QueryCustomer;

+ 7 - 0
js/component/manageCenter/customer/NEW/publicCustomer/publicCustomer.less

@@ -0,0 +1,7 @@
+.ant-table-thead .ant-table-selection-column .ant-checkbox-wrapper{
+    display: inline-block!important;
+}
+
+thead  tr .ant-table-selection-column  span .ant-checkbox-inner{
+    display: inline-block;
+}

+ 104 - 0
js/component/manageCenter/customer/NEW/query/detail.jsx

@@ -0,0 +1,104 @@
+import React from 'react';
+import { Table, Spin, message, Modal } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+const Detail = React.createClass({
+	loadData(data, apiUrl) {
+		this.setState({
+			loading: true,
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + apiUrl,
+			data: {
+				uid: data.id,
+			},
+			success: function(data) {
+				let listArr = [];
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+					return;
+				};
+				for(let i = 0; i < data.data.length; i++) {
+					let thisdata = data.data[i];
+					listArr.push({
+						id: thisdata.id,
+						businessProjectName: thisdata.businessProjectName,
+						salesmanName: thisdata.salesmanName,
+						lockTime: thisdata.lockTime && thisdata.lockTime.split(' ')[0],
+					});
+				};
+				this.setState({
+					dataSource: listArr,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	getInitialState() {
+		return {
+			loading: false,
+			dataSource: [],
+			columns: [{
+					title: '业务名称',
+					dataIndex: 'businessProjectName',
+					key: 'businessProjectName',
+				}, {
+					title: '签单时间',
+					dataIndex: 'lockTime',
+					key: 'lockTime',
+				},
+				{
+					title: '营销员',
+					dataIndex: 'salesmanName',
+					key: 'salesmanName',
+				}
+			],
+		}
+	},
+	visitCancel() {
+		this.setState({
+			visitModul: false
+		})
+		this.props.closeDesc(false);
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.visitModul) {
+			this.setState({
+				visitModul: true
+			})
+			this.loadData(nextProps.data, nextProps.detailApi);
+		}
+	},
+	render() {
+		return(
+			<Modal	
+			      className="customeDetails"
+			      footer=''
+		          title="已签业务"
+		          width='800px'
+		          visible={this.state.visitModul}
+		          onOk={this.visitCancel}
+				  onCancel={this.visitCancel}							          							          
+			        >		
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}    
+                            pagination={false} 
+                           />
+                    </Spin>
+			</Modal>
+		)
+	}
+})
+export default Detail;

+ 214 - 0
js/component/manageCenter/customer/NEW/query/queryCutomer.jsx

@@ -0,0 +1,214 @@
+import React from 'react';
+import { Button,Cascader,Input, Select, Spin, Table, message, Form } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+import { citySelect, provinceList } from '@/NewDicProvinceList';
+import Detaile from './detail.jsx';
+
+const QueryCustomer = React.createClass({
+	loadData(pageNo, apiUrl) {
+		this.setState({
+			visitModul:false,
+			loading: true,
+			ispage:pageNo,
+			modalVisible:false
+		});
+		let api=apiUrl?apiUrl:this.props.ApiUrl;
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + api,
+			data: {
+				pageNo: pageNo || 1,
+				pageSize: this.state.pagination.pageSize,
+				name: this.state.nameSearch,
+				province: !(this.state.addressSearch).length ? this.state.provinceSearch : this.state.addressSearch[0],
+				city: !(this.state.addressSearch).length ? '' : this.state.addressSearch[1],
+			},
+			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.uid,
+							name: thisdata.name,
+							adminName: thisdata.adminName,
+							createTime: thisdata.createTime&&thisdata.createTime.split(' ')[0],
+							locationProvince: thisdata.province ? thisdata.province + '-' + thisdata.city + '-' + thisdata.area : '--'
+						});
+					};
+					this.state.pagination.current = data.data.pageNo;
+				    this.state.pagination.total = data.data.totalCount;
+				};
+				if(data.data&&data.data.list&&!data.data.list.length){
+					this.state.pagination.current=0
+					this.state.pagination.total=0
+				}
+				this.setState({
+					dataSource: theArr,
+					pagination: this.state.pagination,
+					selectedRowKeys:[]
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	getInitialState(){
+		return {
+			addressSearch: [],
+			dataSource:[],
+			loading:false,
+			selectedRowKeys: [],
+			selectedRowKey: [],
+			selectedRows: [],
+			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: 'name',
+					key: 'name',
+				}, {
+					title: '地区',
+					dataIndex: 'locationProvince',
+					key: 'locationProvince',
+				},{
+					title: '创建时间',
+					dataIndex: 'createTime',
+					key: 'createTime',
+				}, 
+				{
+					title: '所属人',
+					dataIndex: 'adminName',
+					key: 'adminName',
+				},
+				{
+					title: '操作',
+					dataIndex: 'abc',
+					key: 'abc',
+					render: (text, record, index) => {
+						return <div>
+                            <Button onClick={(e) =>{ e.stopPropagation(), this.seeDetail(record)}} type="primary">查看详情</Button>                            							    
+                        </div>
+					}
+				}
+			],
+		}
+	},
+	seeDetail(record){
+		this.setState({
+			data:record,
+			visitModul:true
+		})
+	},
+	closeDesc(e) {
+		this.state.visitModul = e;
+	},
+	search() {
+		this.loadData();
+	},
+	reset() {
+		this.state.nameSearch='';
+		this.state.provinceSearch=undefined;
+		this.state.addressSearch=[];
+		this.loadData()
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.ApiUrl!=this.props.ApiUrl) {
+			this.loadData(null,nextProps.ApiUrl);
+		};
+	},
+	componentWillMount() {
+		//城市
+		let Province = [];
+		provinceList.map(function(item) {
+			var id = String(item.id)
+			Province.push(
+				<Select.Option value={id} key={item.name}>{item.name}</Select.Option>
+			)
+		});
+		this.state.Provinces = Province;
+		this.loadData();
+	},
+	render(){
+		const intentionState=this.props.intentionState;
+		const FormItem = Form.Item;
+		const rowSelection = {
+			selectedRowKeys: this.state.selectedRowKeys,
+			onChange: (selectedRowKeys, selectedRows) => {
+				this.setState({
+					modalVisible:false,
+					selectedRows: selectedRows.slice(-1),
+					selectedRowKeys: selectedRowKeys.slice(-1)
+				});
+			},
+			onSelect: (recordt, selected, selectedRows) => {
+				this.setState({
+					modalVisible:false,
+					recordt: recordt.id
+				})
+			},
+		};
+		const hasSelected = this.state.selectedRowKeys.length > 0;
+		return(
+			<div className="user-content" >
+                <div className="content-title">                  
+                    <span>{!intentionState?'单位客户查询':'个人客户查询'}</span>
+                </div>
+                <div className="user-search">                    
+                    <Input placeholder="客户名称"
+                        value={this.state.nameSearch}
+                        onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />    
+                    <Select placeholder="省"
+                            style={{ width: 80 }}
+                            value={this.state.provinceSearch}
+                            onChange={(e) => {this.setState({ provinceSearch: e});}}>
+                            {this.state.Provinces}
+                    </Select> 
+                    <span style={{marginRight:'10px'}}>                   
+	                     <Cascader options={citySelect()}  value={this.state.addressSearch} placeholder="选择城市"
+    						onChange={(e,pre) => { this.setState({ addressSearch: e }) }} />	                 
+                    </span>
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button> 
+                </div>  
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}    
+                            rowSelection={rowSelection}
+                            pagination={this.state.pagination} 
+                           />
+                    </Spin>
+                </div> 
+                <Detaile 
+                	visitModul={this.state.visitModul}
+                	data={this.state.data}
+                	detailApi={this.props.detailApi}
+                	closeDesc={this.closeDesc}
+                />
+            </div>    
+		)
+	}
+})
+export default QueryCustomer;

+ 404 - 0
js/component/manageCenter/customer/NEW/signCustomer/followDetail.jsx

@@ -0,0 +1,404 @@
+import React from 'react'
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {Modal,Form,layout,Radio,Button,Input,Spin,Table,Select,Popconfirm,message} from 'antd';
+import {intentionalService,newFollow,customerStatus} from '@/dataDic.js';
+import {getCompanyIntention,getfllowSituation,getcustomerStatue} from '@/tools.js';
+const FormItem =Form.Item;
+import AddContact from './followDetail/addContact.jsx';
+
+const FollowDetail = React.createClass({
+	getInitialState(){
+		return{
+			visitModul:false,
+			loading:false,
+			data:[],
+			busModul:false,
+			intentionList:[
+				{
+					title: '业务名称',
+					dataIndex: 'businessVarietiesName',
+					width:120,
+					key: 'businessVarietiesName'
+				},
+				{
+					title: '项目名称',
+					dataIndex: 'businessProjectName',
+					key:'businessProjectName',
+					width:120
+				},
+				{
+					title: '最新进度',
+					width:120,
+					dataIndex: 'followSituation',
+					key: 'followSituation',
+					render: (text, record, index) => {
+						return  <span>{getfllowSituation(text)}</span>
+					}
+				}, {
+					title: '最新状态',
+					width:120,
+					dataIndex: 'customerStatus',
+					key: 'customerStatus',
+					render: (text, record, index) => {
+						return <span>{getcustomerStatue(text)}</span>
+					}
+				}, {
+					title: '跟进说明',
+					width:120,
+					dataIndex: 'remarks',
+					key: 'remarks',
+					render: (text, record, index) => {
+						return(
+							<div>
+								<span title={text}>{text&&text.length>14?(text.substr(0,14)+'…'):text}</span>
+							</div>
+							)
+					}
+				}, {
+					title: '操作',
+					width:120,
+					dataIndex: 'rrr',
+					key: 'rrr',
+					render: (text, record, index) => {
+						return <div>
+                            <Popconfirm title="是否删除?" onConfirm={(e)=>{this.intentionDelet(record,index)}} okText="删除" cancelText="不删除">
+							    <Button style={{marginRight:'10px',color:'#ffffff',background:'#f00',border:'none'}}>删除</Button>
+							</Popconfirm>
+                        </div>
+					}
+				}
+			],
+		}
+	},
+	//拜访意向服务列表单个删除
+	intentionDelet(e, index) {
+		if(e.id) {
+			this.setState({
+				loading:true,
+				selectedRowKeys: [],
+			});
+			$.ajax({
+				method: "get",
+				dataType: "json",
+				crossDomain: false,
+				url: globalConfig.context + "/api/admin/customer/deleteFollowOneBusiness",
+				data: {
+					ufbId: e.id
+				}
+			}).done(function(data) {
+				if(!data.error.length) {
+					message.success('删除成功');
+					this.setState({
+						loading: false,
+					});
+				} else {
+					message.warning(data.error[0].message);
+				};
+				this.deletelist(this.props.followData.id)
+			}.bind(this));
+		} 
+	},
+	//拜访modul函数
+	visitOk(e) {
+		this.setState({
+			addcontactModul:false,
+			visitModul: false
+		});
+	},
+	visitCancel(e) {
+		this.setState({
+			addcontactModul:false,
+			visitModul: false
+		});
+	},
+	//获取联系人下拉框
+	getNewWoman(ids) {
+		this.state.data = []
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/findCustomerContacts",
+			data: {
+				uid: ids,
+			},
+			success: function(data) {
+				let theArr = [];
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				var telNum = [];
+				var contactIds = [];
+				thedata.map(function(item, index) {
+					contactIds.push(thedata[index].id);
+					telNum.push(thedata[index].mobile);
+				});
+				for(let item in data.data) {
+					let theData = data.data[item];
+					theArr.push(
+						<Select.Option value={item} key={theData.name}>{theData.name}</Select.Option>
+					);
+				};
+				this.setState({
+					contactsIdArr: thedata,
+					telNum: telNum,
+					orderStatusOption: theArr,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				deletId: ids,
+				loading: false
+			});
+		}.bind(this));
+	},
+	//刷新新增拜访记录刷新
+	deletelist(e) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/toAddFollow',
+			data: {
+				uid: e,
+			},
+			success: function(data) {
+				let listArr = [];
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				for(let i = 0; i < data.data.userBusinessList.length; i++) {
+					let thisdata = data.data.userBusinessList[i];
+					listArr.push({
+						id: thisdata.businessId,
+						businessName:thisdata.businessProjectId,
+						businessVarietiesName:thisdata.businessVarietiesName,
+						businessProjectName:thisdata.businessProjectName,
+						followSituation: String(thisdata.followSituation),
+						customerStatus: String(thisdata.customerStatus),
+						remarks: thisdata.remarks,
+					});
+				};
+				this.setState({
+					contacts: thedata.contacts,
+					uid: thedata.uid,
+					data: listArr,
+					followTime: thedata.followTime,
+					remarks: thedata.remarks,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//当选择联系人的列表变化时,则执行
+	hundleName(e) {
+		let changNub = this.state.telNum[e];
+		this.setState({
+			nub: this.state.telNum[e],
+			lastName: e,
+		});
+	},
+	//点击添加联系人
+	newContacts() {
+		this.setState({
+			busModul:false,
+			uids: this.state.uid,
+			addcontactModul: true
+		});
+	},
+	//页面刷新
+	closeFollow(e, s) {
+		this.state.addcontactModul=false;
+		this.state.visitModul = true;
+		if(s) {
+			this.getNewWoman(this.props.followData.id);
+			this.deletelist(this.props.followData.id)
+		};
+	},
+	//详情保存
+	visitSubmit(e){
+		e.preventDefault();
+		if(this.state.contactType == undefined) {
+			message.warning('请选择拜访方式')
+			return false;
+		};
+		if(this.state.lastName == undefined) {
+			message.warning('请选择联系人')
+			return false;
+		}
+		this.setState({
+			loading: true
+		});
+		let dataList=this.state.data,
+			idsList=[];
+		dataList.map((item,index) => {
+			idsList.push({
+				businessId:item.id||'',
+				businessProjectId:item.businessName,
+				customerStatus:item.customerStatus,
+				followSituation:item.followSituation,
+				remarks:item.remarks||''
+			})
+		});
+		let contactsId = '';
+		let conts = this.state.lastName;
+		contactsId = this.state.contactsIdArr[conts].id;
+		//新增
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url:  globalConfig.context + '/api/admin/customer/addFollow',
+			data: {
+				userBusinessList: JSON.stringify(idsList),
+				uid: this.state.uid,
+				ocbId: contactsId,
+				contactType: this.state.contactType,
+				result: this.state.result,
+				followTime: this.state.followTime,
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDesc(false,true);
+				this.visitCancel();
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+	},
+	componentWillReceiveProps(nextProps) {
+        if (nextProps.visitModul && nextProps.followData.id) {
+            this.setState({
+				result: '',
+				contactType: undefined,
+				visitModul: true,
+				loading: true,
+				lastName:undefined,
+				nub:'',
+				busModul:false,
+				addcontactModul:false
+			})
+			this.getNewWoman(nextProps.followData.id);
+			this.deletelist(nextProps.followData.id)
+        };
+    },
+	render() {
+		const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+		return(
+			<div>
+				<Modal	
+				      className="customeDetails"
+				      footer=''
+			          title="客户跟进详情"
+			          width='1000px'
+			          visible={this.state.visitModul}
+			          onOk={this.visitOk}
+					  onCancel={this.visitCancel}							          							          
+			        >				    
+					    <Form layout="horizontal" id="demand-form" onSubmit={this.visitSubmit}>
+			    			<Spin spinning={this.state.loading}>
+			    			   	<div className="clearfix">
+			    			   		<FormItem 
+			                            labelCol={{ span: 4 }}
+										wrapperCol={{ span: 20 }}
+			                            label="拜访方式" >
+			    			   			<Radio.Group value={this.state.contactType} onChange={(e) => {
+										        this.setState({ contactType: e.target.value }) 
+						                    }}>
+						                        <Radio value={0}>外出</Radio>
+						                        <Radio value={1}>电话</Radio>
+						                        <Radio value={2}>QQ</Radio>
+						                        <Radio value={3}>微信</Radio>
+						                        <Radio value={4}>邮箱</Radio>
+						                </Radio.Group>
+						                <span className="mandatory">*</span>
+					                </FormItem>
+					                <div className="clearfix">
+						                {this.state.contacts?<span></span>:
+							                <FormItem className="half-item"
+					                            {...formItemLayout}
+					                             label="联系人"
+					                             >
+							                	<Select placeholder="选择联系人" style={{ width: 140 }}
+							                        value={this.state.lastName}
+							                        onChange={this.hundleName}>
+							                        {this.state.orderStatusOption}
+				                    			</Select>
+				                    			<span className="mandatory">*</span>
+							                </FormItem>
+						                }
+						                <FormItem className="half-item"
+			                          		 {...formItemLayout}
+			                             	>
+					                			<Button type="primary" onClick={this.newContacts} style={{marginLeft:'100px'}}>添加新联系人</Button>
+					                	</FormItem>
+					                	<FormItem className="half-item"
+				                            {...formItemLayout}
+				                             label="联系电话"
+				                             >
+						                	<span>{this.state.nub}</span>
+						                </FormItem>
+						                <FormItem className="half-item"
+				                            {...formItemLayout}
+				                             label="跟进时间"
+				                             >
+						                	<span>{this.state.followTime}</span>
+						                </FormItem>
+					                </div>
+					                <div className="clearfix">
+					                	<FormItem
+					                        labelCol={{ span: 4 }}
+							                wrapperCol={{ span: 16 }}
+					                        label="跟进备注" >
+					                            <Input type="textarea" rows={4} value={this.state.result} 
+					                              onChange={(e)=>{this.setState({result:e.target.value})}}/>
+					                    </FormItem>
+					                </div>
+					                <div className="clearfix">
+					                 	<div style={{fontSize:'18px',marginLeft:'100px',marginTop:'15px',marginBottom:'10px'}}>业务意向</div>
+					                 	<div className="clearfix" >
+		                    			    <Spin spinning={this.state.loading}>
+										      <Table 
+										         rowKey={record => record.id}
+								            	 pagination={false}
+								            	 columns={this.state.intentionList} 
+								            	 dataSource={this.state.data}
+								            	 />
+										    </Spin> 
+										</div>	 
+					                </div>
+			    			   	</div>
+			    			   	<FormItem wrapperCol={{ span: 12, offset: 6 }}>
+								    <Button  type="primary" size="large" htmlType="submit" style={{marginRight:'150px',marginTop:'20px'}}>保存</Button>
+						           	<Button  size="large" onClick={this.visitCancel}>取消</Button>
+					   			</FormItem>
+					   		</Spin>
+					    </Form>
+				</Modal> 
+				<AddContact 
+					addcontactModul={this.state.addcontactModul}
+					uids={this.state.uids}
+					closeFollow={this.closeFollow}
+				/>
+			</div>
+		)
+	}
+})
+export default FollowDetail;

+ 165 - 0
js/component/manageCenter/customer/NEW/signCustomer/followDetail/addContact.jsx

@@ -0,0 +1,165 @@
+import React from 'react';
+import { Modal, message, layout, Spin, Input,  Button, Form, Row, Col, Radio } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+const FormItem =Form.Item;
+
+const AddContact = React.createClass({
+	getInitialState() {
+		return {
+			addcontactModul: false,
+		}
+	},
+	addcontactModulOK() {
+		this.setState({
+			addcontactModul: false
+		})
+		this.props.closeFollow(true, true)
+	},
+	addcontactModulcancel() {
+		this.setState({
+			addcontactModul: false
+		})
+		this.props.closeFollow(false, false)
+	},
+	//新增联系人保存函数
+	submitcontactman(e) {
+		e.preventDefault();
+		if(!this.state.newname){
+			message.warn('请输入姓名');
+			return ;
+		};
+		if(!this.state.newmobile){
+			message.warn('请输入手机号码');
+			return ;
+		};
+		this.setState({
+			loading: true
+		})
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/addOneContact",
+			data: {
+				uid: this.state.uid,
+				name: this.state.newname,
+				mobile: this.state.newmobile,
+				email: this.state.newemail,
+				wechat: this.state.newwechat,
+				depatrment: this.state.newdepatrment,
+				position: this.state.newposition,
+				sex: this.state.newsex,
+				qq: this.state.newqq
+			},
+			success: function(data) {
+				if(!data.error.length) {
+					this.addcontactModulOK()
+					this.setState({
+						loading: false,
+					})
+				} else {
+					message.warning(data.error[0].message);
+				};
+			}.bind(this)
+		});
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.addcontactModul && nextProps.uids) {
+			this.setState({
+				newsex: undefined,
+				newname: '',
+				newmobile: '',
+				newwechat: '',
+				newqq: '',
+				newdepatrment: '',
+				newposition: '',
+				newemail: '',
+				addcontactModul: true,
+				uid: nextProps.uids,
+				loading:false
+			})
+		};
+	},
+	render() {
+		return(
+			<div>
+				<Modal
+				      footer=''
+				      width='800px'
+			          title="新增联系人"
+			          visible={this.state.addcontactModul}
+			          onOk={this.addcontactModulOK}
+			          onCancel={this.addcontactModulcancel}						          							          
+						        >
+				        <Form layout="horizontal" onSubmit={this.submitcontactman} id="demand-form">
+					      <Spin spinning={this.state.loading}> 											             
+					        <Row>	
+			                    <FormItem 
+			                        labelCol={{ span: 3 }}
+			                        wrapperCol={{ span: 14 }}
+			                        label="性别:"  style={{marginRight:'10px',marginTop: '-15px'}}>
+			                        <Radio.Group value={this.state.newsex} onChange={(e) => {
+					                    this.setState({ newsex: e.target.value }) 
+					                    }}>
+					                        <Radio value='男'>男</Radio>
+					                        <Radio value='女'>女</Radio>
+				                    </Radio.Group>
+			                    </FormItem>	
+							</Row>								               
+					        <Row style={{ paddingLeft:'50px' }}>
+		                        <Col span={2}><span style={{color:'red'}}>*</span>姓名:</Col>
+                                <Col span={8}>
+                                    <Input value={this.state.newname}
+                                        onChange={(e) => { this.setState({ newname: e.target.value }) }} />
+                                </Col>
+                                <Col span={2} style={{ marginLeft: '50px' }}><span style={{color:'red'}}>*</span>手机:</Col>
+                                <Col span={8}>
+                                    <Input value={this.state.newmobile} 
+                                        onChange={(e) => { this.setState({ newmobile: e.target.value }) }} />
+                                </Col>
+                                
+                            </Row>
+		                    <Row style={{ marginTop: '20px',paddingLeft:'50px' }}>
+                                <Col span={2}>微信:</Col>
+                                	<Col span={8}>
+                                    <Input value={this.state.newwechat}
+                                        onChange={(e) => { this.setState({ newwechat: e.target.value }) }} />
+                                </Col>
+                                <Col span={2} style={{ marginLeft: '50px' }}>Q Q:</Col>
+                                <Col span={8}>
+                                    <Input value={this.state.newqq}
+                                        onChange={(e) => { this.setState({ newqq: e.target.value }) }} />
+                                </Col>
+                            </Row>
+                            <Row style={{ marginTop: '20px' ,paddingLeft:'50px'}}>
+                        		<Col span={2}>部门:</Col>
+                        		<Col span={8}>
+                           		 	<Input value={this.state.newdepatrment}
+                               		 onChange={(e) => { this.setState({ newdepatrment: e.target.value }) }} />
+                                </Col>
+                                <Col span={2} style={{ marginLeft: '50px' }}>职位:</Col>
+                                <Col span={8}>
+                                    <Input value={this.state.newposition}
+                                        onChange={(e) => { this.setState({ newposition: e.target.value }) }} />
+                                </Col>
+                            </Row>	
+                            <Row style={{ marginTop: '20px',paddingLeft:'50px' }}>						                       
+                                <Col span={2}>邮箱:</Col>
+                                <Col span={8}>
+                                    <Input value={this.state.newemail}
+                                        onChange={(e) => { this.setState({ newemail: e.target.value }) }} />
+                                </Col>
+                            </Row>
+                            <Row style={{ marginTop: '20px',paddingLeft:'50px' ,marginBottom:'50px'}}>
+		                          <Button className="set-submit" type="primary" htmlType="submit"  id="change_keep" style={{marginLeft:'60px'}}>保存</Button>
+					              <Button className="set-submit" type="ghost" onClick={this.addcontactModulcancel} id='change_rem'>取消</Button>
+			            	</Row>
+			            </Spin>
+			        </Form>   
+			    </Modal>
+			</div>
+		)
+	}
+})
+export default AddContact;

+ 136 - 0
js/component/manageCenter/customer/NEW/signCustomer/followDetail/businessName.jsx

@@ -0,0 +1,136 @@
+import React from 'react'
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import { Radio, Form, Modal, message, layout, Spin, Button } from 'antd';
+
+const BusName = React.createClass({
+	loadData(ids) {
+		console.log(ids)
+		return ;
+		this.setState({
+			loading: true
+		})
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/toAddFollow',
+			data: {
+				uid: e,
+			},
+			success: function(data) {
+				let listArr = [];
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				for(let i = 0; i < data.data.userBusinessList.length; i++) {
+					let thisdata = data.data.userBusinessList[i];
+					listArr.push({
+						id: thisdata.id,
+						businessName: thisdata.businessName,
+						businessGlossoryId: String(thisdata.businessGlossoryId),
+						followSituation: String(thisdata.followSituation),
+						customerStatus: String(thisdata.customerStatus),
+						remarks: thisdata.remarks,
+					});
+				};
+				this.setState({
+					contacts: thedata.contacts,
+					uid: thedata.uid,
+					data: listArr,
+					identifyName: thedata.identifyName,
+					followTime: thedata.followTime,
+					businessGlossoryId: thedata.businessGlossoryId,
+					followSituation: thedata.followSituation,
+					customerStatus: thedata.customerStatus,
+					remarks: thedata.remarks,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+
+	getInitialState() {
+		return {
+			busModul: false
+		}
+	},
+	visitCancel() {
+		this.setState({
+			busModul: false
+		})
+		this.props.closeBus(null,false,false)
+	},
+	selFn() {
+		this.setState({
+			busModul: false
+		});
+		this.props.closeBus(this.state.contactType, false, true);
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.busModul) {
+			this.setState({
+				busModul: true,
+				loading: false
+			})
+			this.loadData(nextProps.businessId)
+		};
+	},
+	render() {
+		const formItemLayout = {
+			labelCol: {
+				span: 4
+			},
+			wrapperCol: {
+				span: 18
+			},
+		};
+		return(
+			<Modal	
+			      className="customeDetails"
+			      footer=''
+		          title="项目名称"
+		          width='600px'
+		          visible={this.state.busModul}
+		          onOk={this.visitCancel}
+				  onCancel={this.visitCancel}							          							          
+		        >	
+			        <Form layout="horizontal" id="demand-form" >
+		    			<Spin spinning={this.state.loading}>
+		    			   	<div className="clearfix">
+		    			   		<Form.Item 
+		                            {...formItemLayout}
+		                            label="已签单业务" >
+		    			   			<span>好东东.</span>
+				           		</Form.Item>
+		    			   		<Form.Item 
+		                            {...formItemLayout}
+		                            label="项目名称" >
+		    			   			<Radio.Group value={this.state.contactType} onChange={(e) => {
+									        this.setState({ contactType: e.target.value }) 
+					                    }}>
+					                        <Radio value={'外出'}>外出</Radio>
+					                        <Radio value={'电话电话电话电话电话电话'}>电话</Radio>
+					                        <Radio value={'QQ'}>QQ</Radio>
+					                        <Radio value={'微信'}>微信</Radio>
+					                        <Radio value={'邮箱'}>邮箱</Radio>
+					                </Radio.Group>
+				           		</Form.Item>
+				           		<Form.Item wrapperCol={{ span: 12, offset: 4 }}>
+		    			   			<Button onClick={this.selFn} type='primary'>选定</Button>
+		    			   			<Button onClick={this.visitCancel} style={{marginLeft:'40px'}}>取消</Button>
+				           		</Form.Item>
+				            </div>
+				        </Spin>
+					</Form>
+			</Modal>
+		)
+	}
+})
+export default BusName;

+ 209 - 0
js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/account.jsx

@@ -0,0 +1,209 @@
+import React from 'react';
+import {Form,Button,Spin,message,Input,Select,Radio} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+const FormItem =Form.Item;
+import {statuslist,lvl,currentMember} from '@/dataDic.js';
+import {getcustomerTyp} from '@/tools.js';
+const Account =React.createClass({
+	httpAccount(record) {
+		this.RowClick;
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/findUserAccountDetail',
+			data: {
+				uid: record
+			},
+			success: function(data) {
+				let thisData = data.data;
+				if(!thisData) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thisData = {};
+				};
+				let sourcecustomer = ''
+				switch(String(thisData.source)) {
+					case '0':
+						sourcecustomer = '注册客户'
+						break;
+					case '1':
+						sourcecustomer = '录入客户'
+						break;
+				}
+				this.setState({
+					Accountuid: thisData.id,
+					mobile: thisData.mobile,
+					nickname: thisData.nickname,
+					email: thisData.email,
+					type: getcustomerTyp(String(thisData.type)),
+					source: sourcecustomer,
+					isMember: thisData.isMember,
+					currentMemberStatus: String(thisData.currentMemberStatus),
+					lvl: String(thisData.lvl),
+					status: String(thisData.status),
+					createTimes: thisData.createTimes,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	getInitialState(){
+		return{
+			loading:false
+		}
+	},
+	//账户信息保存
+	accountSave(e) {
+		e.preventDefault();
+		if(!this.state.mobile) {
+			message.warning('手机号码不能为空!')
+			return false;
+		}
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/updateUserAccount',
+			data: {
+				id: this.state.Accountuid,
+				mobile: this.state.mobile,
+				nickname: this.state.nickname,
+				email: this.state.email,
+				isMember: this.state.isMember,
+				currentMemberStatus: this.state.currentMemberStatus,
+				lvl: this.state.lvl,
+				status: this.state.status,
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDetail(false,true)
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+	},
+	
+	componentWillMount(){
+		this.httpAccount(this.props.data.id);
+	},
+	detailsModal(){
+		this.props.closeDetail(false, false)
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.id&&nextProps.accountState){
+			this.httpAccount(nextProps.data.id)
+		}
+	},
+	render(){
+		const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+		return(
+			<div className="clearfix">
+    			<Form layout="horizontal" id="demand-form" onSubmit={this.accountSave} >
+    				<Spin spinning={this.state.loading} >
+    					<FormItem className="half-item"
+	                            {...formItemLayout}
+	                            label="注册手机号" >
+    						<span>{this.state.mobile}</span>
+	                    </FormItem>
+	                    <FormItem className="half-item"
+	                            {...formItemLayout}
+	                            label="注册用户名" >
+	                         <Input value={this.state.nickname}  onChange={(e) => { this.setState({ nickname: e.target.value }); }} />        
+	                    </FormItem>
+	                    <FormItem className="half-item"
+	                            {...formItemLayout}
+	                            label="注册邮箱" >
+	                         <Input value={this.state.email}  onChange={(e) => { this.setState({ email: e.target.value }); }} />        
+	                    </FormItem>
+	                    <div className="clearfix">
+		                    <FormItem className="half-item"
+		                            {...formItemLayout}
+		                            label="客户来源" >
+		                            <span>{this.state.source}</span>   
+		                    </FormItem>
+		                    <FormItem className="half-item"
+		                            {...formItemLayout}
+		                            label="客户类型" >
+		                            <span>{this.state.type}</span>   
+		                    </FormItem>
+		                    <FormItem className="half-item"
+		                            {...formItemLayout}
+		                            label="创建时间" >
+		                            <span>{this.state.createTimes}</span>   
+		                    </FormItem>
+		                    <FormItem className="half-item" 
+	                           {...formItemLayout}
+	                           label="账户状态"
+	                         > 
+							    <Select placeholder="账户状态" value={this.state.status}  onChange={(e) => { this.setState({ status: e }); }} >
+                                {
+                                    statuslist.map(function (item) {
+                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                }
+                              </Select>
+	                   		</FormItem>
+	                   	</div>
+                   		<div className="clearfix">
+				            <FormItem className="half-item"
+				                {...formItemLayout}
+		                        label="会员"
+				            > 
+		                   		 <Radio.Group value={this.state.isMember} onChange={(e) => {
+				                        this.setState({ isMember:  e.target.value })
+				                    }}>
+				                        <Radio value={0}>否</Radio>
+				                        <Radio value={1}>是</Radio>
+				                  </Radio.Group>
+				            </FormItem>
+				            <FormItem className="half-item" 
+		                          {...formItemLayout}
+		                           label="会员等级"
+		                         > 
+							    <Select placeholder="客户状态" value={this.state.lvl}  onChange={(e) => { this.setState({ lvl: e }); }} >
+                                 {
+                                    lvl.map(function (item) {
+                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                 }
+                               </Select>
+	                   		</FormItem>
+	                   		<FormItem className="half-item" 
+	                           {...formItemLayout}
+	                           label="会员状态"
+	                         > 
+							    <Select placeholder="会员状态" value={this.state.currentMemberStatus}  onChange={(e) => { this.setState({ currentMemberStatus: e }); }} >
+                                {
+                                    currentMember.map(function (item) {
+                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                }
+                                </Select>
+	                   		</FormItem>
+	                   	</div>
+			            <div className="clearfix">
+			                <Button className='saveBtn' type="primary" htmlType="submit">保存</Button>  
+                            <Button  type="ghost" onClick={this.detailsModal}>取消</Button>
+			            </div>
+    				</Spin>
+    			</Form>	
+    		</div>
+		)
+	}
+})
+export default Account;

+ 507 - 0
js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/basic.jsx

@@ -0,0 +1,507 @@
+import React from 'react';
+import { Radio, Icon, Button, AutoComplete, Cascader, layout, Input, Select, Tabs, Spin, Popconfirm, Popover, Table, Switch, message, DatePicker, Modal, Upload, Form, Row, Col, TimePicker } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import { citySelect, provinceList, areaSelect } from '@/NewDicProvinceList';
+import { socialAttribute, industry, newFollow, auditStatusL, lvl, currentMember, cityArr, statuslist, customerStatus, intentionalService, sex } from '@/dataDic.js';
+import { getCompanyIntention, splitUrl, getIndustry, getStatuslist, getAuditStatus, getContactType, getSocialAttribute, getfllowSituation, beforeUploadFile, getWhether, getcityArr, getcustomerStatue, getfllowSituationOn, getCertification, getcustomerTyp, getLvl, getCurrentMember, getprovince } from '@/tools.js';
+const FormItem = Form.Item;
+//图片组件
+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;
+	},
+	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 Basic = React.createClass({
+	getInitialState() {
+		return {
+			loading: false,
+			orgCodeUrl: [],
+			companyLogoUrl: [],
+		}
+	},
+	loadInformation(record) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/findOrganizationCustomerDetail',
+			data: {
+				uid: record
+			},
+			success: function(data) {
+				let thisData = data.data;
+				if(!thisData) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thisData = {};
+				};
+				let ProvinceCityArr = [];
+				let ProvinceS = thisData.locationProvince; //getprovince
+				let citys = thisData.locationCity;
+				let Areas = thisData.locationArea;
+				ProvinceCityArr.push(ProvinceS, citys, Areas);
+				console.log(ProvinceCityArr)
+				this.setState({
+					InformationId: thisData.id,
+					InformationUid: thisData.uid,
+					identifyName: thisData.identifyName,
+					listed: thisData.listed,
+					highTechZone: thisData.highTechZone,
+					orgCodeUrl: thisData.orgCodeUrl ? splitUrl(thisData.orgCodeUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					companyLogoUrl: thisData.companyLogoUrl ? splitUrl(thisData.companyLogoUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					dataInformation: thisData,
+					ProvinceCity: ProvinceCityArr[0]!=null?ProvinceCityArr:undefined,
+					contacts: thisData.contacts,
+					contactMobile: thisData.contactMobile,
+					industry: String(thisData.industry) == 'null' ? undefined : String(thisData.industry),
+					international: thisData.international,
+					societyTag: thisData.societyTag||undefined,
+					introduction: thisData.introduction,
+					postalAddress: thisData.postalAddress,
+					contactsFixedTel: thisData.contactsFixedTel,
+					contactsFax: thisData.contactsFax,
+					registeredCapital: thisData.registeredCapital,
+					enterpriseScale: thisData.enterpriseScale,
+					legalPerson: thisData.legalPerson,
+					legalPersonIdCard: thisData.legalPersonIdCard,
+					legalPersonTel: thisData.legalPersonTel,
+					legalPersonEmail: thisData.legalPersonEmail,
+					businessScope: thisData.businessScope,
+					orgCode: thisData.orgCode,
+					investment: thisData.investment,
+					auditStatus: thisData.auditStatus ? String(thisData.auditStatus) : undefined,
+					businessAudit: thisData.businessAudit
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//图片
+	getOrgCodeUrl(e) {
+		this.setState({
+			orgCodeUrl: e
+		});
+	},
+	getCompanyLogoUrl(e) {
+		this.setState({
+			companyLogoUrl: e
+		});
+	},
+	//基本信息提交
+	newSubmit(e) {
+		e.preventDefault();
+		if(!this.state.industry) {
+			message.warning('请选择行业');
+			return false;
+		};
+		if(!this.state.societyTag) {
+			message.warning('请选择社会性质');
+			return false;
+		};
+		if(!this.state.ProvinceCity[1]) {
+			message.warning('请选择地区');
+			return false;
+		};
+		if(isNaN(this.state.registeredCapital)) {
+			message.warning('注册资本只能输入数字')
+			return false;
+		};
+		if(isNaN(this.state.enterpriseScale)) {
+			message.warning('单位规模只能输入数字')
+			return false;
+		}
+		this.setState({
+			selectedRowKeys: [],
+		});
+
+		let theorgCodeUrl = [];
+		if(this.state.orgCodeUrl.length) {
+			let picArr = [];
+			this.state.orgCodeUrl.map(function(item) {
+				if(item.response && item.response.data && item.response.data.length) {
+					picArr.push(item.response.data);
+				}
+			});
+			theorgCodeUrl = picArr.join(",");
+		};
+		let thecompanyLogoUrl = [];
+		if(this.state.companyLogoUrl.length) {
+			let picArr = [];
+			this.state.companyLogoUrl.map(function(item) {
+				if(item.response && item.response.data && item.response.data.length) {
+					picArr.push(item.response.data);
+				}
+			});
+			thecompanyLogoUrl = picArr.join(",");
+		};
+
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/updateOrganizationCustomer',
+			data: {
+				id: this.state.InformationId,
+				uid: this.state.InformationUid,
+				societyTag: this.state.societyTag,
+				introduction: this.state.introduction,
+				unitName: this.state.unitName,
+				industry: this.state.industry,
+				locationProvince: (this.state.ProvinceCity)[0], //省-
+				locationCity: (this.state.ProvinceCity)[1], //市
+				locationArea: (this.state.ProvinceCity)[2], //区
+				postalAddress: this.state.postalAddress,
+				contactsFixedTel: this.state.contactsFixedTel,
+				contactsFax: this.state.contactsFax,
+				registeredCapital: this.state.registeredCapital ? this.state.registeredCapital : 0,
+				enterpriseScale: this.state.enterpriseScale ? this.state.enterpriseScale : 0,
+				legalPerson: this.state.legalPerson,
+				legalPersonIdCard: this.state.legalPersonIdCard,
+				legalPersonTel: this.state.legalPersonTel,
+				legalPersonEmail: this.state.legalPersonEmail,
+				highTechZone: this.state.highTechZone,
+				listed: this.state.listed,
+				contacts: this.state.contacts,
+				contactMobile: this.state.contactMobile,
+				international: this.state.international,
+				orgCode: this.state.orgCode,
+				businessScope: this.state.businessScope,
+				introduction: this.state.introduction,
+				companyLogoUrl: thecompanyLogoUrl != 0 ? thecompanyLogoUrl : '',
+				orgCodeUrl: theorgCodeUrl != 0 ? theorgCodeUrl : '',
+				businessAudit: this.state.businessAudit,
+				auditStatus: this.state.auditStatus
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDetail(false, true)
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+	},
+	//取消
+	detailsModal() {
+		this.props.closeDetail(false, false)
+	},
+	componentWillMount(){
+		this.loadInformation(this.props.data.id)
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data&&nextProps.basicState){
+			this.loadInformation(nextProps.data.id)
+		}
+	},
+	render() {
+		return(
+			<div>
+				 <Form layout="horizontal" onSubmit={this.newSubmit} id="demand-form">
+	                <Spin spinning={this.state.loading}>
+		               	<div className="clearfix" style={{paddingLeft:'60px'}}>
+	                    	<FormItem className="half-item"
+			                    labelCol={{ span: 4 }}
+			                    wrapperCol={{ span: 18 }}
+			                    label="客户名称"
+		                        >
+		                        <span>{this.state.identifyName}</span>
+		                    </FormItem>
+	                    </div>
+	                    <div className="clearfix" style={{paddingLeft:'60px'}}>
+	                    	<FormItem className="half-item" 
+	                         labelCol={{ span: 4 }}
+	                         wrapperCol={{ span: 18 }}
+	                         label="行业">
+							    <Select placeholder="选择行业" value={this.state.industry}  style={{width:'300px'}}
+							    				onChange={(e)=>{this.setState({industry:e})}}>
+                                      {
+                                        industry.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                      }
+                                </Select>
+                                <span style={{color:'red',marginLeft:'15px'}}>*</span>
+	                   		 </FormItem>
+	                   		 <FormItem className="half-item" 
+	                           labelCol={{ span: 4 }}
+	                            wrapperCol={{ span: 18 }}
+	                           label="社会属性"
+	                         > 
+								    <Select placeholder="客户社会属性(必填项)" value={this.state.societyTag}  style={{width:'300px'}}
+							    				onChange={(e)=>{this.setState({societyTag:e})}}>
+                                    {
+                                        socialAttribute.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                    }
+                                </Select>
+                                <span style={{color:'red',marginLeft:'15px'}}>*</span>
+	                   		 </FormItem>
+	                         <FormItem className="half-item" 
+	                           labelCol={{ span: 4 }}
+	                           wrapperCol={{ span: 18 }}
+	                           label="省-市-区"
+	                          > 
+	                            <Cascader options={areaSelect()}  value={this.state.ProvinceCity} placeholder="选择城市" style={{width:'300px'}}
+									onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} />
+									<span style={{color:'red',marginLeft:'15px'}}>*</span>
+		                   </FormItem>
+		                   <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                         label="通信地址"
+		                            >
+		                                <Input placeholder="客户通信地址" value={this.state.postalAddress} 
+							    				onChange={(e)=>{this.setState({postalAddress:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                         label="固定电话"
+		                            >
+		                                <Input placeholder="客户固定电话" value={this.state.contactsFixedTel} 
+							    				onChange={(e)=>{this.setState({contactsFixedTel:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="客户传真"
+		                            >
+		                                <Input placeholder="客户传真" value={this.state.contactsFax} 
+							    				onChange={(e)=>{this.setState({contactsFax:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="注册资本"
+		                            >
+		                                <Input placeholder="注册资本" value={this.state.registeredCapital}  maxLength='6'
+							    				onChange={(e)=>{this.setState({registeredCapital:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="单位规模"
+		                            >
+		                                <Input placeholder="单位规模" value={this.state.enterpriseScale} maxLength='1'
+							    				onChange={(e)=>{this.setState({enterpriseScale:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="法人名称"
+		                            >
+		                                <Input placeholder="法人名称" value={this.state.legalPerson} 
+							    				onChange={(e)=>{this.setState({legalPerson:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="身份证号码"
+		                            >
+		                                <Input placeholder="法人身份证号码" value={this.state.legalPersonIdCard} 
+							    				onChange={(e)=>{this.setState({legalPersonIdCard:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item" 
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="主要联系人"
+	                           	 >
+		                            <Input placeholder="主要联系人" value={this.state.contacts} onChange={(e) => {
+				                        this.setState({ contacts:  e.target.value })}}/>
+		                     </FormItem>
+		                     <FormItem className="half-item" 
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="主要联系人号码"
+	                           	 >
+		                            <Input placeholder="主要联系人号码" value={this.state.contactMobile} onChange={(e) => {
+				                        this.setState({ contactMobile:  e.target.value })}}/>
+		                     </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="法人电话"
+		                            > 
+		                                <Input placeholder="法人电话" value={this.state.legalPersonTel} 
+							    				onChange={(e)=>{this.setState({legalPersonTel:e.target.value})}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="电子邮箱"
+		                            >
+		                                <Input placeholder="法人电子邮箱" value={this.state.legalPersonEmail} 
+							    				onChange={(e)=>{this.setState({legalPersonEmail:e.target.value})}}/>
+		                    </FormItem>
+				            <FormItem className="half-item"
+			                    	labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="机构代码"
+		                            >
+		                                <Input placeholder="社会同意机构代码" value={this.state.orgCode} 
+							    				onChange={(e)=>{this.setState({orgCode:e.target.value})}}/>
+		                    </FormItem>
+				           <div className="clearfix">
+					        <FormItem className="half-item"
+		                   			 labelCol={{ span: 4 }}
+	                            wrapperCol={{ span: 18 }}
+			                           label="业务认证"
+		                   		>
+			                   		 <Radio.Group value={this.state.businessAudit} onChange={(e) => {
+					                        this.setState({ businessAudit:  e.target.value })
+					                    }}>
+					                        <Radio value={0}>未认证</Radio>
+					                        <Radio value={1}>已认证</Radio>
+					                  </Radio.Group>
+					        </FormItem>
+	                   		<FormItem className="half-item"
+                   		   		labelCol={{ span: 4 }}
+	                            wrapperCol={{ span: 18 }}
+	                            label="高新"
+	                   		    >
+		                   		 <Radio.Group value={this.state.highTechZone} onChange={(e) => {
+				                        this.setState({highTechZone:e.target.value})
+				                    }}>
+				                        <Radio value={0}>否</Radio>
+				                        <Radio value={1}>是</Radio>
+				                  </Radio.Group>
+				            </FormItem>
+	                   	     <FormItem className="half-item"
+                   		   		labelCol={{ span: 4 }}
+	                            wrapperCol={{ span: 18 }}
+	                            label="上市"
+	                   		    >
+		                   		 <Radio.Group value={this.state.listed} onChange={(e) => {
+				                        this.setState({listed:e.target.value })
+				                    }}>
+				                        <Radio value={0}>否</Radio>
+				                        <Radio value={1}>是</Radio>
+				                  </Radio.Group>
+						     </FormItem>
+						     <FormItem className="half-item"
+                   		   		labelCol={{ span: 4 }}
+	                            wrapperCol={{ span: 18 }}
+	                            label="国际化"
+	                   		    >
+		                   		 <Radio.Group value={this.state.international} onChange={(e) => {
+				                        this.setState({international:e.target.value })
+				                    }}>
+				                        <Radio value={0}>否</Radio>
+				                        <Radio value={1}>是</Radio>
+				                  </Radio.Group>
+						     </FormItem>
+						     </div>
+		                    <div className="clearfix pictures">
+		                        <FormItem
+			                        labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="机构证(PIC)" >
+			                        <PicturesWall
+			                            pictureSign="PIC"
+			                            fileList={this.getOrgCodeUrl}
+			                            pictureUrl={this.state.orgCodeUrl} />
+			                            <p>图片建议:图片要清晰。</p>
+		                        </FormItem>
+		                        <FormItem
+			                        labelCol={{ span: 4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="单位logo" > 
+			                        <PicturesWall
+			                            pictureSign="logo"
+			                            fileList={this.getCompanyLogoUrl}
+			                            pictureUrl={this.state.companyLogoUrl} />
+			                            <p>图片建议:图片要清晰。</p>
+			                    </FormItem>
+			                </div> 
+			                <div className="clearfix">
+			                    <FormItem
+		                        labelCol={{ span: 2 }}
+		                        wrapperCol={{ span: 18 }}
+		                        label="业务范围" >
+		                            <Input type="textarea" rows={4} value={this.state.businessScope} 
+							    				onChange={(e)=>{this.setState({businessScope:e.target.value})}}/>
+			                    </FormItem>
+			                    <FormItem
+			                        labelCol={{ span: 2 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="单位简介" >
+			                            <Input type="textarea" rows={4}  value={this.state.introduction} 
+							    				onChange={(e)=>{this.setState({introduction:e.target.value})}}/>			                      
+			                    </FormItem>
+		                    </div>
+		                    <Button className="set-submit" type="primary" htmlType="submit" >保存</Button>  
+	                        <Button type="ghost" onClick={this.detailsModal}>取消</Button>
+	                    </div>		                	
+				    </Spin>
+				</Form>		
+			</div>
+		)
+	}
+})
+export default Basic;

+ 555 - 0
js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/basicPerson.jsx

@@ -0,0 +1,555 @@
+import React from 'react';
+import { Radio, Icon, Button, AutoComplete, Cascader, layout, Input, Select, Tabs, Spin, Popconfirm, Popover, Table, Switch, message, DatePicker, Modal, Upload, Form, Row, Col, TimePicker } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import { citySelect, provinceList, areaSelect } from '@/NewDicProvinceList';
+import { socialAttribute, industry, newFollow, auditStatusL, lvl, currentMember, cityArr, statuslist, customerStatus, intentionalService, sex } from '@/dataDic.js';
+import { getCompanyIntention, splitUrl, getIndustry, getStatuslist, getAuditStatus, getContactType, getSocialAttribute, getfllowSituation, beforeUploadFile, getWhether, getcityArr, getcustomerStatue, getfllowSituationOn, getCertification, getcustomerTyp, getLvl, getCurrentMember, getprovince } from '@/tools.js';
+const FormItem = Form.Item;
+const monthFormat = 'YYYY/MM';
+//图片组件
+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;
+	},
+	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 Basic = React.createClass({
+	getInitialState() {
+		return {
+			loading: false,
+			orgCodeUrl: [],
+			companyLogoUrl: [],
+			headPortraitUrl: [],
+			positiveIdUrl: [],
+			oppositeIdUrl: []
+		}
+	},
+	loadInformation(record) {
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/findPersonalCustomerDetail',
+			data: {
+				uid: record
+			},
+			success: function(data) {
+				let thisData = data.data;
+				if(!thisData) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thisData = {};
+				};
+				let ProvinceCityArr = [];
+				let ProvinceS = thisData.province; //getprovince
+				let citys = thisData.city;
+				let Areas = thisData.area;
+				ProvinceCityArr.push(ProvinceS, citys, Areas);
+				let month = thisData.dateOfBirthYear ? thisData.dateOfBirthYear + '/' + thisData.dateOfBirthMonth : false;
+				this.setState({
+					InformationId: thisData.id,
+					InformationUid: thisData.uid,
+					identifyName: thisData.identifyName,
+					listed: thisData.listed,
+					highTechZone: thisData.highTechZone,
+					headPortraitUrl: thisData.headPortraitUrl ? splitUrl(thisData.headPortraitUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					positiveIdUrl: thisData.positiveIdUrl ? splitUrl(thisData.positiveIdUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					oppositeIdUrl: thisData.oppositeIdUrl ? splitUrl(thisData.oppositeIdUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					dataInformation: thisData,
+					idNumber: thisData.idNumber,
+					contacts: thisData.contacts,
+					contactMobile: thisData.contactMobile,
+					ProvinceCity: ProvinceCityArr[0]!=null?ProvinceCityArr:undefined,
+					industry: thisData.industry ? String(thisData.industry) : undefined,
+					societyTag: thisData.societyTag||undefined,
+					sex: thisData.sex,
+					yearMonth: month,
+					postalAddress: thisData.postalAddress,
+					fixedTel: thisData.fixedTel,
+					consultationPrice: thisData.consultationPrice,
+					email: thisData.email,
+					qq: thisData.qq,
+					introduction: thisData.introduction,
+					expert: thisData.expert,
+					celebrity: thisData.celebrity,
+					consultant: thisData.consultant,
+					international: thisData.international,
+					investment: thisData.investment,
+					professionalTitle: thisData.professionalTitle,
+					workUnit: thisData.workUnit,
+					education: thisData.education,
+					graduateSchool: thisData.graduateSchool,
+					majorCategory: thisData.majorCategory,
+					qualification: thisData.qualification,
+					businessAudit: thisData.businessAudit,
+					auditStatus: thisData.auditStatus ? String(thisData.auditStatus) : undefined,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//图片
+	getOrgCodeUrl(e) {
+		this.setState({
+			orgCodeUrl: e
+		});
+	},
+	getCompanyLogoUrl(e) {
+		this.setState({
+			companyLogoUrl: e
+		});
+	},
+	//基本信息提交
+	newSubmit(e) {
+		e.preventDefault();
+		if(!this.state.industry) {
+			message.warning('请选择行业');
+			return false;
+		};
+		if(!this.state.societyTag) {
+			message.warning('请选择社会性质');
+			return false;
+		};
+		if(!this.state.ProvinceCity[1]) {
+			message.warning('请选择地区');
+			return false;
+		};
+		var reg = /^[1-9]\d*$|^0$/;
+		if(this.state.consultationPrice) {
+			if(this.state.consultationPrice.length > 6) {
+				message.warning('咨询费用不超过6位数');
+				this.refs.consul.focus();
+				return false;
+			};
+			if(!reg.test(this.state.consultationPrice)) {
+				message.warning('咨询费用只能输入数字');
+				this.refs.consul.focus();
+				return false;
+			}
+		}
+
+		this.state.data = [];
+		this.setState({
+			selectedRowKeys: [],
+		});
+
+		let theorgCodeUrl = [];
+		if(this.state.headPortraitUrl.length) {
+			let picArr = [];
+			this.state.headPortraitUrl.map(function(item) {
+				if(item.response && item.response.data && item.response.data.length) {
+					picArr.push(item.response.data);
+				}
+			});
+			theorgCodeUrl = picArr.join(",");
+		};
+		let thecompanyLogoUrl = [];
+		if(this.state.positiveIdUrl.length) {
+			let picArr = [];
+			this.state.positiveIdUrl.map(function(item) {
+				if(item.response && item.response.data && item.response.data.length) {
+					picArr.push(item.response.data);
+				}
+			});
+			thecompanyLogoUrl = picArr.join(",");
+		};
+		let thecompanyLogoUrls = [];
+		if(this.state.oppositeIdUrl.length) {
+			let picArr = [];
+			this.state.oppositeIdUrl.map(function(item) {
+				if(item.response && item.response.data && item.response.data.length) {
+					picArr.push(item.response.data);
+				}
+			});
+			thecompanyLogoUrls = picArr.join(",");
+		};
+
+		let years = [];
+		let yearMonth = this.state.yearMonth != undefined ? new Date(this.state.yearMonth).toLocaleDateString() : '';
+		years = yearMonth.split('/');
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/updatePersonalCustomer',
+			data: {
+				id: this.state.InformationId,
+				uid: this.state.InformationUid,
+				societyTag: this.state.societyTag,
+				identifyName: this.state.identifyName,
+				industry: this.state.industry,
+				dateOfBirthYear: years[0], //出生年
+				dateOfBirthMonth: years[1], //出生月
+				province: (this.state.ProvinceCity)[0], //省-
+				city: (this.state.ProvinceCity)[1], //市
+				area: (this.state.ProvinceCity)[2], //区
+				sex: this.state.sex,
+				expert: this.state.expert,
+				celebrity: this.state.celebrity,
+				consultant: this.state.consultant,
+				international: this.state.international,
+				fixedTel: this.state.fixedTel,
+				consultationPrice: this.state.consultationPrice ? this.state.consultationPrice : 0,
+				qq: this.state.qq,
+				contacts: this.state.contacts,
+				contactMobile: this.state.contactMobile,
+				idNumber: this.state.idNumber,
+				email: this.state.email,
+				isMember: this.state.isMember,
+				postalAddress: this.state.postalAddress,
+				introduction: this.state.introduction,
+				positiveIdUrl: thecompanyLogoUrl.length != 0 ? thecompanyLogoUrl : '',
+				oppositeIdUrl: thecompanyLogoUrls != 0 ? thecompanyLogoUrls : '',
+				headPortraitUrl: theorgCodeUrl != 0 ? theorgCodeUrl : '',
+				investment: this.state.investment,
+				professionalTitle: this.state.professionalTitle,
+				workUnit: this.state.workUnit,
+				education: this.state.education,
+				graduateSchool: this.state.graduateSchool,
+				majorCategory: this.state.majorCategory,
+				qualification: this.state.qualification,
+				businessAudit: this.state.businessAudit,
+				auditStatus: this.state.auditStatus,
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDetail(false, true)
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+
+	},
+	//取消
+	detailsModal() {
+		this.props.closeDetail(false, false)
+	},
+	componentWillMount() {
+		this.loadInformation(this.props.data.id)
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data && nextProps.basicState) {
+			this.loadInformation(nextProps.data.id)
+		}
+	},
+	render() {
+		const {
+			RangePicker,
+			MonthPicker
+		} = DatePicker;
+		const formItemLayout = {
+			labelCol: {
+				span: 8
+			},
+			wrapperCol: {
+				span: 14
+			},
+		};
+		return(
+			<div>
+				 <Form layout="horizontal" onSubmit={this.newSubmit} id="demand-form">
+	                <Spin spinning={this.state.loading}>
+		               	<div className="clearfix" >
+	                    	<FormItem className="half-item"
+			                     {...formItemLayout}
+			                    label="客户姓名"
+		                        >
+	                    	 <span>{this.state.identifyName}</span>
+		                    </FormItem>
+	                    </div>
+	                    <div className="clearfix" >
+	                    	<FormItem className="half-item" 
+	                          {...formItemLayout}
+	                         label="行业">
+							    <Select placeholder="选择行业" value={this.state.industry}  style={{width:'300px'}}
+							    				onChange={(e)=>{this.setState({industry:e})}}>
+                                      {
+                                        industry.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                      }
+                                </Select>
+                                <span style={{color:'red',marginLeft:'15px'}}>*</span>
+	                   		 </FormItem>
+	                   		 <FormItem className="half-item" 
+	                            {...formItemLayout}
+	                           label="社会属性"
+	                           > 
+								    <Select placeholder="客户社会属性" value={this.state.societyTag}  style={{width:'300px'}}
+							    				onChange={(e)=>{this.setState({societyTag:e})}}> 
+                                     {
+                                        socialAttribute.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                        })
+                                    }
+                                </Select>  
+                                <span style={{color:'red',marginLeft:'15px'}}>*</span>
+	                   		 </FormItem>
+	                   		 <FormItem className="half-item" 
+	                            {...formItemLayout}
+	                           label="省-市-区"
+	                          > 
+	                            <Cascader options={areaSelect()}  value={this.state.ProvinceCity} placeholder="选择城市" style={{width:'300px'}}
+									onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} />
+									<span style={{color:'red',marginLeft:'15px'}}>*</span>
+		                    </FormItem>
+	                   		 <FormItem className="half-item" 
+		                           {...formItemLayout}
+		                           label="出生日期"
+	                          > 
+	                              {!this.state.yearMonth?<MonthPicker placeholder="选择出生年月" value={this.state.yearMonth||null} onChange={(time) => {this.setState({yearMonth: time});}}/>	   	 
+		                          :<MonthPicker value={moment(this.state.yearMonth, monthFormat)} format={monthFormat} onChange={(time) => {this.setState({yearMonth: time});}}/>
+		                    	}
+		                    </FormItem>
+		                     <FormItem className="half-item" 
+			                    	 {...formItemLayout}
+			                        label="身份证号码"
+	                           	 >
+		                            <Input placeholder="身份证号码" value={this.state.idNumber} onChange={(e) => {
+				                        this.setState({ idNumber:  e.target.value })}}/>
+		                     </FormItem>
+							<FormItem className="half-item" 
+			                    	 {...formItemLayout}
+			                        label="主要联系人"
+	                           	 >
+		                            <Input placeholder="主要联系人" value={this.state.contacts} onChange={(e) => {
+				                        this.setState({ contacts:  e.target.value })}}/>
+		                    </FormItem>
+		                    <FormItem className="half-item" 
+			                    	 {...formItemLayout}
+			                        label="主要联系人号码"
+	                           	 >
+		                            <Input placeholder="主要联系人号码" value={this.state.contactMobile} onChange={(e) => {
+				                        this.setState({ contactMobile:  e.target.value })}}/>
+		                    </FormItem>
+		                    <div className="clearfix">
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="职称名字"
+		                           	 >
+			                            <Input placeholder="职称名字" value={this.state.professionalTitle} onChange={(e) => {
+					                        this.setState({ professionalTitle:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="就业单位"
+		                           	 >
+			                            <Input placeholder="就业单位" value={this.state.workUnit} onChange={(e) => {
+					                        this.setState({ workUnit:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="学历"
+		                           	 >
+			                            <Input placeholder="学历" value={this.state.education} onChange={(e) => {
+					                        this.setState({ education:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="毕业院校"
+		                           	 >
+			                            <Input placeholder="学历" value={this.state.graduateSchool} onChange={(e) => {
+					                        this.setState({ graduateSchool:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="专业类别"
+		                           	 >
+			                            <Input placeholder="专业类别" value={this.state.majorCategory} onChange={(e) => {
+					                        this.setState({ majorCategory:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item" 
+				                    	 {...formItemLayout}
+				                        label="职业资格"
+		                           	 >
+			                            <Input placeholder="职业资格" value={this.state.qualification} onChange={(e) => {
+					                        this.setState({ qualification:  e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+				                    	 {...formItemLayout}
+				                         label="通信地址"
+			                            >
+			                                <Input placeholder="客户通信地址" value={this.state.postalAddress} 
+										onChange={(e,pre) => { this.setState({ postalAddress: e.target.value }) }}/>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+				                    	 {...formItemLayout}
+				                         label="固定电话"
+			                            >
+			                                <Input placeholder="客户固定电话" value={this.state.fixedTel} 
+										onChange={(e) => { this.setState({ fixedTel: e.target.value }) }}/>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+				                    	 {...formItemLayout}
+				                         label="客户QQ"
+			                            >
+			                                <Input placeholder="客户QQ" value={this.state.qq} 
+										onChange={(e) => { this.setState({ qq: e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+				                    	 {...formItemLayout}
+				                         label="电子邮箱"
+			                            >
+			                                <Input placeholder="客户电子邮箱" value={this.state.email} 
+										onChange={(e) => {this.setState({email: e.target.value })}}/>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+				                    	 {...formItemLayout}
+				                         label="咨询费用"
+			                            >
+			                                <Input ref='consul' placeholder="请输入咨询费用" value={this.state.consultationPrice} 
+										onChange={(e) => {this.setState({consultationPrice: e.target.value })}}/>
+			                    </FormItem>
+			                </div>
+		                    <div className="clearfix">
+		                        <FormItem className="half-item"
+			                   			 {...formItemLayout}
+				                           label="业务认证"
+			                   		>
+				                   		 <Radio.Group value={this.state.businessAudit} onChange={(e) => {
+						                        this.setState({ businessAudit:  e.target.value })
+						                    }}>
+						                        <Radio value={0}>未认证</Radio>
+						                        <Radio value={1}>已认证</Radio>
+						                  </Radio.Group>
+						        </FormItem>
+						        <FormItem className="half-item"
+					                {...formItemLayout}
+			                        label="国际化"
+					            > 
+			                   		 <Radio.Group value={this.state.international} onChange={(e) => {
+					                        this.setState({ international:  e.target.value })
+					                    }}>
+					                        <Radio value={0}>否</Radio>
+					                        <Radio value={1}>是</Radio>
+					                  </Radio.Group>
+					             </FormItem>
+		                   		 <FormItem className="half-item" 
+			                            {...formItemLayout}
+			                           label="性别"
+			                         > 
+			                   		 <Radio.Group value={this.state.sex} onChange={(e) => {
+					                        this.setState({sex:e.target.value})
+					                    }}>
+					                        <Radio value={'男'}>男</Radio>
+					                        <Radio value={'女'}>女</Radio>
+					                  </Radio.Group>
+		                   		 </FormItem>
+	                   		 </div>
+		                    <div className='clearfix'>
+			                    <FormItem
+			                        labelCol={{ span:4 }}
+			                        wrapperCol={{ span: 18 }}
+			                        label="客户简介" >
+			                            <Input type="textarea" rows={4} value={this.state.introduction} 
+									onChange={(e,pre) => { this.setState({ introduction: e.target.value })}}/>
+			                    </FormItem>
+		                    </div>
+		                    <div className="clearfix pictures">
+		                        <FormItem style={{display:'inline-block',width:'350px',marginTop:'20px',marginLeft:'95px'}}
+			                        labelCol={{ span: 8 }}
+			                        wrapperCol={{ span: 10 }}
+			                        label="身份证正面" >
+			                        <PicturesWall
+			                            fileList={this.getPositiveIdUrl}
+			                            pictureUrl={this.state.positiveIdUrl} />
+			                            <p>建议:图片要清晰。</p>
+		                        </FormItem>
+		                        <FormItem style={{display:'inline-block',width:'350px',marginTop:'20px'}}
+			                        labelCol={{ span: 8 }}
+			                        wrapperCol={{ span: 10 }}
+			                        label="身份证反面" > 
+			                        <PicturesWall
+			                            fileList={this.getOppositeIdUrl}
+			                            pictureUrl={this.state.oppositeIdUrl} />
+			                            <p>建议:图片要清晰。</p>
+			                    </FormItem>
+			                    <FormItem style={{display:'inline-block' ,width:'350px',marginTop:'20px'}}
+			                        labelCol={{ span: 8 }}
+			                        wrapperCol={{ span: 10 }}
+			                        label="客户照片" > 
+			                        <PicturesWall
+			                            fileList={this.getHeadPortraitUrl}
+			                            pictureUrl={this.state.headPortraitUrl} />
+			                            <p>建议:图片要清晰。</p>
+			                    </FormItem>
+			                </div> 
+		                    <Button className="setSubmit" type="primary" htmlType="submit">保存</Button>  
+	                        <Button type="ghost" onClick={this.detailsModal}>取消</Button>
+	                    </div>		                	
+				    </Spin>
+				</Form>		
+			</div>
+		)
+	}
+})
+export default Basic;

+ 166 - 0
js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/businFollow.jsx

@@ -0,0 +1,166 @@
+import React from 'react';
+import {Form,Button,Spin,message,Modal} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {getCompanyIntention ,getfllowSituation,getcustomerStatue,getContactType} from '@/tools.js';
+const FormItem =Form.Item;
+
+
+const BusinFollow =React.createClass({
+	getInitialState(){
+		return {
+			loading:false
+		}
+	},	
+	businessFollowCancel(){
+		this.setState({
+			businessFollowModul:false
+		})
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.ufbId&&nextProps.businessFollowModul){
+			this.setState({
+				businessFollowModul:true
+			})
+			this.listFollowUp(nextProps.data);
+		}
+	},
+	listFollowUp(e) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/toUpdateFollowOneBusiness",
+			data: {
+				ufbId: e.ufbId
+			},
+			success: function(data) {
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				this.setState({
+					businessGlossoryIds: thedata.businessGlossoryId,
+					followSituations: thedata.followSituation,
+					customerStatuss: thedata.customerStatus,
+					followTimes: thedata.followTime,
+					createTimes: thedata.createTime,
+					identifyNames: thedata.identifyName,
+					contactTypes: parseInt(thedata.contactType),
+					results: thedata.result,
+					remarkss: thedata.remarks,
+					adminNames: thedata.adminName,
+					contactss: thedata.contacts,
+					contactMobiles: thedata.contactMobile,
+					ufbId: thedata.ufbId,
+					followIds: thedata.followId,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	render(){
+		const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+		return(
+			<Modal	
+		      footer=''
+	          title="业务跟进详情"
+	          width='600px'
+	          visible={this.state.businessFollowModul}
+	          onOk={this.businessFollowCancel}
+			  onCancel={this.businessFollowCancel}							          							          
+	        >				    
+			    <div className="clearfix">
+	    			<Form layout="horizontal" id="demand-form">
+	    				<Spin spinning={this.state.loading}>
+	    					<div className="clearfix">
+		    					<FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="意向业务名称" >
+			                        <span>{getCompanyIntention(this.state.businessGlossoryIds)}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="意向时间" >
+			                        <span>{this.state.createTimes}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="客户名称" >
+			                        <span>{this.state.identifyNames}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="营销员" >
+			                        <span>{this.state.adminNames}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="意向业务进度" >
+			                        <span>{getfllowSituation(this.state.followSituations)}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="业务客户状态" >
+			                        <span>{getcustomerStatue(this.state.customerStatuss)}</span>
+			                    </FormItem>
+			                </div>
+		                    <div className="clearfix">
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="业务意向说明" >
+			                        <span>{this.state.remarkss}</span>
+			                    </FormItem>
+	                        </div>
+	                        <div className="clearfix">
+	                        	<div style={{fontSize:'18px',lineHeight:'30px'}}>拜访情况</div>
+	                        	<FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="拜访方式" >
+			                        <span>{getContactType(this.state.contactTypes)}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="联系人" >
+			                        <span>{this.state.contactss}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="联系电话" >
+			                        <span>{this.state.contactMobiles}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="拜访时间" >
+			                        <span>{this.state.followTimes}</span>
+			                    </FormItem>
+			                    <FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="拜访人" >
+			                        <span>{this.state.adminNames}</span>
+			                    </FormItem> 
+			                    <div className="clearfix">
+			                    	<FormItem className="half-item"
+			                            {...formItemLayout}
+			                            label="拜访备注" >
+			                        <span>{this.state.results}</span>
+			                    </FormItem>
+			                    </div>
+	                        </div>
+		                </Spin>
+					</Form>                  
+				</div>	                    
+		</Modal>
+		)
+	}
+})
+export default BusinFollow;

+ 149 - 0
js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/business.jsx

@@ -0,0 +1,149 @@
+import React from 'react';
+import {Form,Button,Spin,message,Table,Popconfirm} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {getfllowSituation,getcustomerStatue} from '@/tools.js';
+import BusinessDetail from './businessDetail.jsx';
+
+const Business = React.createClass({
+	getInitialState(){
+		return{
+			loading:false,
+			dataBusiness:[],
+			followData:{},
+			paginationt: {
+				defaultCurrent: 1,
+				defaultPageSize: 10,
+				showQuickJumper: true,
+				pageSize: 10,
+				onChange: function(page) {
+					this.BusinessList(page, false);
+				}.bind(this),
+				showTotal: function(total) {
+					return '共' + total + '条数据';
+				}
+			},
+			businessIntentionList: [{
+				title: '意向时间',
+				dataIndex: 'createTime',
+				key: 'createTime'
+			}, {
+				title: '客户名称',
+				dataIndex: 'identifyName',
+				key: 'identifyName'
+			}, {
+				title: '业务名',
+				dataIndex: 'businessName',
+				key: 'businessName'
+			}, {
+				title: '营销员',
+				dataIndex: 'adminName',
+				key: 'adminName'
+			}, {
+				title: '业务意向进度',
+				dataIndex: 'followSituation',
+				key: 'followSituation',
+				render: text => { return getfllowSituation(text) }
+			}, {
+				title: '客户状态',
+				dataIndex: 'customerStatus',
+				key: 'customerStatus',
+				render: text => { return getcustomerStatue(text) }
+			}, {
+				title: '操作',
+				dataIndex: 'ooo',
+				key: 'ooo',
+				render: (text, record) => { return(<Button onClick={(e)=>{this.businessIntentionDetails(record)}}>查看</Button>) }
+			}],
+		}
+	},
+	businessIntentionDetails(record){
+		this.setState({
+			followData: record,
+			businessModul:true
+		})
+	},
+	//业务意向
+	BusinessList(pageNo) {
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/listBusiness',
+			data: {
+				pageNo: pageNo || 1,
+				pageSize: this.state.paginationt.pageSize,
+				uid: this.props.data.id
+			},
+			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,
+							businessId: thisdata.businessId,
+							businessName: thisdata.businessName,
+							identifyName: thisdata.identifyName,
+							followSituation: thisdata.followSituation,
+							customerStatus: thisdata.customerStatus,
+							adminName: thisdata.adminName,
+							createTime: thisdata.createTime
+						});
+					};
+					this.state.paginationt.current = data.data.pageNo;
+					this.state.paginationt.total = data.data.totalCount;
+				};
+				this.setState({
+					dataBusiness: theArr,
+					paginationt: this.state.paginationt||[]
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	componentWillMount(){
+		this.BusinessList();
+	},
+	detailsModal(){
+		this.props.closeDetail(false, false)
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.id&&nextProps.businessState){
+			this.BusinessList();
+		}
+		this.setState({
+			businessModul:false
+		})
+	},
+	render(){
+		return(
+			<div className="clearfix">
+			    <Spin spinning={this.state.loading}>
+			      <Table 
+	            	 pagination={this.state.paginationt}
+	            	 columns={this.state.businessIntentionList} 
+	            	 dataSource={this.state.dataBusiness}
+	            	 />
+			    </Spin> 
+			    <BusinessDetail 
+			    	ids={this.props.data.id}
+			    	data={this.state.followData}
+			    	businessModul={this.state.businessModul}
+			    />
+			</div>
+		)
+	}
+})
+
+export default Business;

+ 312 - 0
js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/businessDetail.jsx

@@ -0,0 +1,312 @@
+import React from 'react';
+import {Form,Button,Spin,message,Table,Popconfirm,Modal} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {getCompanyIntention,getfllowSituation,getcustomerStatue,getContactType } from '@/tools.js';
+const FormItem =Form.Item;
+import BusinFollow from './businFollow.jsx'
+
+const BusinessDetail =React.createClass({
+	getInitialState(){
+		return {
+			loading:false,
+			visitArrList: [],
+			busData:{},
+			paginationst: {
+				defaultCurrent: 1,
+				defaultPageSize: 10,
+				showQuickJumper: true,
+				pageSize: 10,
+				onChange: function(page) {
+					this.loadVisit(page);
+				}.bind(this),
+				showTotal: function(total) {
+					return '共' + total + '条数据';
+				}
+			},
+			businessFollowList: [{
+					title: '跟进时间',
+					dataIndex: 'followTime',
+					key: 'followTime',
+				}, {
+					title: '营销员',
+					dataIndex: 'adminName',
+					key: 'adminName',
+				}, {
+					title: '业务意向进度',
+					dataIndex: 'followSituation',
+					key: 'followSituation',
+					render: text => { return getfllowSituation(text) }
+				}, {
+					title: '客户状态',
+					dataIndex: 'customerStatus',
+					key: 'customerStatus',
+					render: text => { return getcustomerStatue(text) }
+				},
+				{
+					title: '拜访方式',
+					dataIndex: 'contactType',
+					key: 'contactType',
+					render: text => { return getContactType(text) }
+				}, {
+					title: '联系人',
+					dataIndex: 'contacts',
+					key: 'contacts',
+				},
+				{
+					title: '联系电话',
+					dataIndex: 'contactMobile',
+					key: 'contactMobile',
+				}, {
+					title: '操作',
+					dataIndex: 'ooo',
+					key: 'ooo',
+					render: (text, record) => { return(<Button onClick={(e)=>{this.businessFollowDetails(record)}}>查看</Button>) }
+				}
+			],
+		}
+	},
+	//业务跟进查看跟多
+	businessFollowDetails(e) {
+		this.setState({
+			busData:e,
+			businessFollowModul: true
+		})
+	},
+	listFollowUp(e) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/toUpdateFollowOneBusiness",
+			data: {
+				ufbId: e
+			},
+			success: function(data) {
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+				this.setState({
+					businessGlossoryIds: thedata.businessGlossoryId,
+					followSituations: thedata.followSituation,
+					customerStatuss: thedata.customerStatus,
+					followTimes: thedata.followTime,
+					createTimes: thedata.createTime,
+					identifyNames: thedata.identifyName,
+					contactTypes: parseInt(thedata.contactType),
+					results: thedata.result,
+					remarkss: thedata.remarks,
+					adminNames: thedata.adminName,
+					contactss: thedata.contacts,
+					contactMobiles: thedata.contactMobile,
+					ufbId: thedata.ufbId,
+					followIds: thedata.followId,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//查看跟进记录列表
+	loadVisit(pageNo) {
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/listFollowHistory',
+			data: {
+				pageNo: pageNo || 1,
+				pageSize: this.state.paginationst.pageSize,
+				uid: this.props.ids, //名称1
+				businessGlossoryId: this.state.businessGlossoryId,
+			},
+			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({
+							followId: thisdata.followId,
+							followTime: thisdata.followTime,
+							identifyName: thisdata.identifyName,
+							contacts: thisdata.contacts,
+							contactMobile: thisdata.contactMobile,
+							result: thisdata.result,
+							ufbId: thisdata.ufbId,
+							adminName: thisdata.adminName,
+							followSituation: thisdata.followSituation,
+							customerStatus: thisdata.customerStatus,
+							contactType: thisdata.contactType
+						});
+					};
+					this.state.paginationst.current = data.data.pageNo;
+					this.state.paginationst.total = data.data.totalCount;
+				};
+				if(data.data.list&&!data.data.list.length){
+					this.state.paginationst.current =0;
+					this.state.paginationst.total = 0;
+				};
+				this.setState({
+					visitArrList: theArr,
+					paginationst: this.state.paginationst
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	businessIntentionDetails(e) {
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/toUpdateBusiness',
+			data: {
+				businessId: e.businessId
+			},
+			success: function(data) {
+				let thisData = data.data;
+				if(!thisData) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thisData = {};
+				};
+				this.setState({
+					businessGlossoryId: thisData.businessGlossoryId,
+					identifyName: thisData.identifyName,
+					uid: thisData.uid,
+					businessId: thisData.businessId,
+					followSituation: thisData.followSituation,
+					customerStatus: thisData.customerStatus,
+					createTime: thisData.createTime,
+					followTime: thisData.followTime,
+					adminName: thisData.adminName,
+					remarks: thisData.remarks,
+					result: thisData.result,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.loadVisit();
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+		this.setState({
+			businessModul: true
+		})
+	},
+	businessIntentionCancel(){
+		this.setState({
+			businessFollowModul:false,
+			businessModul:false
+		})
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.businessId&&nextProps.businessModul&&nextProps.ids){
+			this.setState({
+				businessModul:true
+			})
+			this.businessIntentionDetails(nextProps.data);
+		}
+		this.setState({
+			businessFollowModul:false
+		})
+	},
+	render(){
+		const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+		return(
+			<div>
+				<Modal	
+				      footer=''
+			          title="业务意向详情"
+			          width='1000px'
+			          visible={this.state.businessModul}
+			          onOk={this.businessIntentionCancel}
+					  onCancel={this.businessIntentionCancel}							          							          
+			        >				    
+					    <div className="clearfix">
+			    			<Form layout="horizontal" id="demand-form" onSubmit={this.passworldSubmit}>
+			    				<Spin spinning={this.state.loading}>
+			    					<div className="clearfix">
+				    					<FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="意向业务名称" >
+					                        <span>{getCompanyIntention(this.state.businessGlossoryId)}</span>
+					                    </FormItem>
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="意向时间" >
+					                        <span>{this.state.createTime}</span>
+					                    </FormItem>
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="客户名称" >
+					                        <span>{this.state.identifyName}</span>
+					                    </FormItem>
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="营销员" >
+					                        <span>{this.state.adminName}</span>
+					                    </FormItem>
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="意向业务进度" >
+					                        <span>{getfllowSituation(this.state.followSituation)}</span>
+					                    </FormItem>
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="业务客户状态" >
+					                        <span>{getcustomerStatue(this.state.customerStatus)}</span>
+					                    </FormItem>
+					                </div>
+				                    <div className="clearfix">
+					                    <FormItem className="half-item"
+					                            {...formItemLayout}
+					                            label="业务意向说明" >
+					                        <span>{this.state.remarks}</span>
+					                    </FormItem>
+			                        </div>
+			                        <div className="clearfix">
+			                        	<div style={{fontSize:'18px',lineHeight:'24px',marginBottom:'10px'}}>业务跟进</div>
+			                        	<div className="clearfix">
+		                    			    <Spin spinning={this.state.loading}>
+										      <Table 
+								            	 pagination={this.state.paginationst}
+								            	 columns={this.state.businessFollowList} 
+								            	 dataSource={this.state.visitArrList}
+								            	 />
+										    </Spin> 
+										</div>	
+			                        </div>
+				                </Spin>
+							</Form>                  
+						</div>	                    
+    			</Modal>
+    			<BusinFollow 
+    				data={this.state.busData}
+    				businessFollowModul={this.state.businessFollowModul}
+    			/>
+			</div>
+		)
+	}
+});
+export default BusinessDetail;

+ 275 - 0
js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/contactPerson.jsx

@@ -0,0 +1,275 @@
+import React from 'react';
+import {Form,Table,Button,Spin,message,Input,Popconfirm,Col} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+
+const ContactPerson = React.createClass({
+	getInitialState() {
+		return {
+			contactList:[],
+			loading:false,
+			ContactsLists: [{
+					title: '姓名',
+					dataIndex: 'name',
+					key: 'name',
+					render: (text, record, index) => {
+						return <Input value={record.name} placeholder="姓名(必填项)" key={record.id} required="required"
+	                           onChange={(e) => { record.name = e.target.value; 
+	                           	this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+					title: '联系人部门',
+					dataIndex: 'depatrment',
+					key: 'depatrment',
+					render: (text, record, index) => {
+						return <Input value={record.depatrment} placeholder="联系人部门" key={record.id}
+	                   onChange={(e) => { record.depatrment = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+					title: '联系人职务',
+					dataIndex: 'position',
+					key: 'position',
+					render: (text, record, index) => {
+						return <Input value={record.position} placeholder="联系人职务" key={record.id}
+	                  onChange={(e) => { record.position = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+                    title: '主要联系人',
+                    dataIndex: 'major',
+                    width:100,
+                    key: 'major',
+                    render:(text) => {
+                    	return text?'是':"否"
+                    }
+                },{
+					title: '手机号码',
+					dataIndex: 'mobile',
+					key: 'mobile',
+					render: (text, record, index) => {
+						return <Input value={record.mobile} placeholder="手机号码(必填项)" key={record.id} required="required"
+	                  onChange={(e) => { record.mobile = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+					title: '微信',
+					dataIndex: 'wechat',
+					key: 'wechat',
+					render: (text, record, index) => {
+						return <Input value={record.wechat} placeholder="微信" key={record.id}
+	                  onChange={(e) => { record.wechat = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+					title: '联系人QQ',
+					dataIndex: 'qq',
+					key: 'qq',
+					render: (text, record, index) => {
+						return <Input value={record.qq} placeholder="联系人QQ" key={record.id}
+	                  onChange={(e) => { record.qq = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				}, {
+					title: '电子邮箱',
+					dataIndex: 'email',
+					key: 'email',
+					render: (text, record, index) => {
+						return <Input value={record.email} placeholder="电子邮箱" key={record.id}
+	                  onChange={(e) => { record.email = e.target.value; this.setState({ contactList: this.state.contactList }); }} style={{width:'120px'}}/>
+					}
+				},
+				{
+					title: '操作',
+					dataIndex: 'dels',
+					key: 'dels',
+					render: (text, record, index) => {
+						return <div>{adminData.isSuperAdmin ? 
+		                            <Popconfirm title="是否删除?" onConfirm={(e)=>{this.confirmDelet(record)}} okText="删除" cancelText="不删除">
+									    <Button style={{marginRight:'10px',color:'#ffffff',background:'#f00',border:'none'}}>删除</Button>
+									</Popconfirm>
+									:''}
+								{record.name?<Button style={{marginRight:'10px',color:'#ffffff',background:'green',border:'none'}} onClick={(e)=>{e.stopPropagation(),this.mainContact(record)}}>设为主要联系人</Button>:''}
+                            </div>
+					}
+				}
+			],
+		}
+	},
+	//tab2删除
+	confirmDelet(e) {
+		this.setState({
+			loading: true
+		});
+		if(e.id) {
+			$.ajax({
+				method: "get",
+				dataType: "json",
+				crossDomain: false,
+				url: globalConfig.context + "/api/admin/customer/deleteOneContact",
+				data: {
+					ocbId: e.id, //删除的ID    
+				}
+			}).done(function(data) {
+				if(!data.error.length) {
+					message.success('删除成功!');
+					this.setState({
+						loading: false,
+					});
+				} else {
+					message.warning(data.error[0].message);
+				};
+				this.contactLists();
+			}.bind(this));
+		} else {
+			this.contactLists();
+		}
+	},
+	//选择主要联系人
+	mainContact(record){
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/updateMainContact",
+			data: {
+				uid:this.props.data.id,
+				ocbId: record.id 
+			}
+		}).done(function(data) {
+			if(!data.error.length) {
+				message.success('设为主要联系人成功!');
+				this.setState({
+					loading: false,
+				});
+			} else {
+				message.warning(data.error[0].message);
+			};
+			this.contactLists();
+		}.bind(this));
+	},
+	//tab2获取联系人详情
+	contactLists(ids) {
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/findCustomerContacts',
+			data: {
+				uid: ids||this.props.data.id, //名称1
+			},
+			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({
+							id: thisdata.id,
+							name: thisdata.name,
+							mobile: thisdata.mobile,
+							email: thisdata.email,
+							qq: thisdata.qq,
+							wechat: thisdata.wechat,
+							depatrment: thisdata.depatrment,
+							position: thisdata.position,
+							major:thisdata.major
+						});
+					};
+
+				};
+				this.setState({
+					contactList: theArr,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//新增
+	//tab2新增联系人
+	addcontact() {
+		this.state.contactList.push({
+			id: null,
+			name: '',
+			mobile: '',
+			email: '',
+			qq: '',
+			wechat: '',
+			depatrment: '',
+			position: '',
+		});
+
+		this.setState({
+			contactList: this.state.contactList
+		})
+	},	
+	//tab2联系人保存
+	contactSave(e) {
+		e.preventDefault();
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			url: globalConfig.context + '/api/admin/customer/updateCustomerContacts',
+			method: 'post',
+			data: {
+				uid: this.props.data.id,
+				contactList: JSON.stringify(this.state.contactList)
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDetail(false,true)
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+	},
+	componentWillMount(){
+		this.contactLists(this.props.data.id);
+	},
+	detailsModal(){
+		this.props.closeDetail(false, false)
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.id&&nextProps.contactState){
+			this.contactLists(nextProps.data.id)
+		}
+	},
+	render() {
+		return(
+			<div>
+			    <div className="clearfix" >
+					 <Button className="ContactsList" type="primary" onClick={this.addcontact}>新增</Button> 
+				</div>
+		       <div className="clearfix">
+    			  <Spin spinning={this.state.loading}>
+    			     <Form layout="horizontal" id="demand-form" onSubmit={this.contactSave} >
+				      <Table 
+		            	 pagination={false}
+		            	 columns={this.state.ContactsLists} 
+		            	 dataSource={this.state.contactList}
+		            	 />
+	            	    	<Col span={24} offset={9} style={{marginTop:'15px'}}>
+				                <Button  type="primary" htmlType="submit">保存</Button>  
+                                <Button  type="ghost" onClick={this.detailsModal} style={{marginLeft:'100px'}}>取消</Button>
+				            </Col>
+		            	</Form> 
+				   </Spin> 
+				</div>
+			</div>
+		)
+	}
+})
+export default ContactPerson;

+ 197 - 0
js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/visit.jsx

@@ -0,0 +1,197 @@
+import React from 'react';
+import {Form,Button,Spin,message,Table,Popconfirm} from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {getContactType} from '@/tools.js';
+import VisitDetail from './visitDetail.jsx';
+
+const Visit = React.createClass({
+	getInitialState(){
+		return{
+			visitArrList:[],
+			loading:false,
+			visitModul:false,
+			paginations: {
+				defaultCurrent: 1,
+				defaultPageSize: 10,
+				showQuickJumper: true,
+				pageSize: 10,
+				onChange: function(page) {
+					this.loadVisit(page);
+				}.bind(this),
+				showTotal: function(total) {
+					return '共' + total + '条数据';
+				}
+			},
+			visitsList: [{
+				title: '拜访时间',
+				dataIndex: 'followTime',
+				key: 'followTime'
+			}, {
+				title: '客户名称',
+				dataIndex: 'identifyName',
+				key: 'identifyName'
+			}, {
+				title: '拜访方式',
+				dataIndex: 'contactType',
+				key: 'contactType',
+				render: text => { return getContactType(text) }
+			}, {
+				title: '联系人',
+				dataIndex: 'contacts',
+				key: 'contacts'
+			}, {
+				title: '联系电话',
+				dataIndex: 'contactMobile',
+				key: 'contactMobile'
+			}, {
+				title: '拜访人',
+				dataIndex: 'adminName',
+				key: 'adminName'
+			}, {
+				title: '拜访说明',
+				dataIndex: 'result',
+				key: 'result'
+			}, {
+				title: '操作',
+				dataIndex: 'ttt',
+				key: 'ttt',
+				render: (text, record, index) => {
+					return <div>
+                            <Popconfirm title="是否删除?" onConfirm={(e)=>{this.visitDelet(record)}} okText="删除" cancelText="不删除">
+							    <Button style={{marginRight:'10px',color:'#ffffff',background:'#f00',border:'none'}} onClick={(e)=>{e.stopPropagation()}}>删除</Button>
+							</Popconfirm>
+                        </div>
+				}
+			}],
+		}
+	},
+	//拜访记录删除
+	visitDelet(e) {
+		this.setState({
+			visitModul:false,
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/deleteFollow",
+			data: {
+				followId: e.followId, //删除的ID    
+			}
+		}).done(function(data) {
+			if(!data.error.length) {
+				message.success('删除成功!');
+				this.setState({
+					loading: false,
+				});
+			} else {
+				message.warning(data.error[0].message);
+			};
+			this.loadVisit();
+		}.bind(this));
+	},
+	//查看跟进记录列表
+	loadVisit(pageNo) {
+		this.setState({
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + '/api/admin/customer/listFollowHistory',
+			data: {
+				pageNo: pageNo || 1,
+				pageSize: this.state.paginations.pageSize,
+				uid: this.props.data.id, //名称1
+			},
+			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({
+							followId: thisdata.followId,
+							followTime: thisdata.followTime,
+							identifyName: thisdata.identifyName,
+							contacts: thisdata.contacts,
+							contactMobile: thisdata.contactMobile,
+							result: thisdata.result,
+							adminName: thisdata.adminName,
+							followSituation: thisdata.followSituation,
+							customerStatus: thisdata.customerStatus,
+							contactType: thisdata.contactType
+						});
+					};
+					this.state.paginations.current = data.data.pageNo;
+					this.state.paginations.total = data.data.totalCount;
+				};
+				if(data.data.list&&!data.data.list.lenth){
+					this.state.paginations.current = 0;
+					this.state.paginations.total = 0;
+				};
+				this.setState({
+					visitArrList: theArr,
+					paginations: this.state.paginations
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	componentWillMount(){
+		this.loadVisit();
+	},
+	detailsModal(){
+		this.props.closeDetail(false, false)
+	},
+	//点击整行
+	VisitRowClick(record){
+		this.setState({
+			followData: record,
+			visitModul:true,
+		})
+	},
+	closeDesc(e,s){
+		this.state.visitModul=e
+		if(s){
+			this.loadVisit()
+		}
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.data.id&&nextProps.visitState){
+			this.loadVisit()
+		}
+		this.setState({
+			visitModul:false
+		})
+	},
+	render(){
+		return(
+			<div className="clearfix">
+			    <Spin spinning={this.state.loading}>
+			      <Table 
+	            	 pagination={this.state.paginations}
+	            	 columns={this.state.visitsList} 
+	            	 dataSource={this.state.visitArrList}
+	            	 onRowClick={this.VisitRowClick}
+	            	 />
+			    </Spin> 
+			    <VisitDetail 
+			    	followData={this.state.followData}
+			    	visitModul={this.state.visitModul}
+			    	closeDesc={this.closeDesc}
+			    />
+			</div>	
+		)
+	}
+})
+export default Visit;

+ 331 - 0
js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/detail/visitDetail.jsx

@@ -0,0 +1,331 @@
+import React from 'react'
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import {Modal,Form,layout,Radio,Button,Input,Spin,Table,Select,Popconfirm,message} from 'antd';
+import {intentionalService,newFollow,customerStatus} from '@/dataDic.js';
+import {getCompanyIntention,getfllowSituation,getcustomerStatue} from '@/tools.js';
+const FormItem =Form.Item;
+import BusName from '../../followDetail/businessName.jsx';
+
+const VisitDetail = React.createClass({
+	getInitialState(){
+		return{
+			visitModul:false,
+			loading:false,
+			data:[],
+			//业务意向列表
+			intentionList:[
+				{
+					title: '业务名称',
+					dataIndex: 'businessVarietiesName',
+					width:120,
+					key: 'businessVarietiesName'
+				},
+				{
+					title: '项目名称',
+					dataIndex: 'businessProjectName',
+					key:'businessProjectName',
+					width:120
+				},
+				{
+					title: '最新进度',
+					width:120,
+					dataIndex: 'followSituation',
+					key: 'followSituation',
+					render: (text, record, index) => {
+						return  <span>{getfllowSituation(text)}</span>
+					}
+				}, {
+					title: '最新状态',
+					width:120,
+					dataIndex: 'customerStatus',
+					key: 'customerStatus',
+					render: (text, record, index) => {
+						return <span>{getcustomerStatue(text)}</span>
+					}
+				}, {
+					title: '跟进说明',
+					width:120,
+					dataIndex: 'remarks',
+					key: 'remarks',
+					render: (text, record, index) => {
+						return(
+							<div>
+								<span title={text}>{text&&text.length>14?(text.substr(0,14)+'…'):text}</span>
+							</div>
+							)
+					}
+				}, {
+					title: '操作',
+					width:120,
+					dataIndex: 'rrr',
+					key: 'rrr',
+					render: (text, record, index) => {
+						return <div>
+                            <Popconfirm title="是否删除?" onConfirm={(e)=>{this.intentionDelet(record,index)}} okText="删除" cancelText="不删除">
+							    <Button style={{marginRight:'10px',color:'#ffffff',background:'#f00',border:'none'}}>删除</Button>
+							</Popconfirm>
+                        </div>
+					}
+				}
+			],
+		}
+	},
+	//选择子项目
+	businessFn(record,index){
+		if(!record.businessGlossoryId){
+			message.warn('请先选择业务名称!');
+			return;
+		}
+		this.setState({
+			businessId:record.businessGlossoryId,
+			busModul:true,
+			index:index,
+			addcontactModul:false
+		})
+	},
+	closeBus(data,e,s){
+		this.state.addcontactModul=e;
+		this.state.busModul=false;
+		if(s){
+			this.state.data[this.state.index].businessName=data;
+			this.setState({
+				busModul:false,
+				data:this.state.data
+			})
+		}
+	},
+	//进入修改拜访记录  
+	visitModify(e) {
+		this.setState({
+			visitModul: true,
+			loading: true
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/toUpdateFollow',
+			data: {
+				followId: e,
+			},
+			success: function(data) {
+				let theArr = [];
+				let thedata = data.data;
+				if(!thedata) {
+					if(data.error && data.error.length) {
+						message.warning(data.error[0].message);
+					};
+					thedata = {};
+				};
+
+				for(let i = 0; i < data.data.userBusinessList.length; i++) {
+					let thisdata = data.data.userBusinessList[i];
+					theArr.push({
+						id: thisdata.businessId,
+						businessName:thisdata.businessProjectId,
+						businessVarietiesName:thisdata.businessVarietiesName,
+						businessProjectName:thisdata.businessProjectName,
+						followSituation: String(thisdata.followSituation),
+						customerStatus: String(thisdata.customerStatus),
+						remarks: thisdata.remarks,
+					});
+				};
+				console.log(theArr)
+				this.setState({
+					followIds: thedata.followId,
+					contacts: thedata.contacts,
+					uid: thedata.uid,
+					dataBus: theArr,
+					result: thedata.result,
+					contactMobile:thedata.contactMobile,
+					contactType: parseInt(thedata.contactType),
+					followTime: thedata.followTime,
+					followSituation: thedata.followSituation,
+					customerStatus: thedata.customerStatus,
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+	//拜访意向服务列表单个删除
+	intentionDelet(e, index) {
+		let detId = this.state.followIds;
+		if(e.id) {
+			this.setState({
+				selectedRowKeys: [],
+			});
+			$.ajax({
+				method: "get",
+				dataType: "json",
+				crossDomain: false,
+				url: globalConfig.context + "/api/admin/customer/deleteFollowOneBusiness",
+				data: {
+					ufbId: e.id
+				}
+			}).done(function(data) {
+				if(!data.error.length) {
+					message.success('删除成功');
+					this.setState({
+						loading: false,
+					});
+				} else {
+					message.warning(data.error[0].message);
+				};
+				this.visitModify(detId);
+			}.bind(this));
+		} else {
+			this.visitModify(detId);
+		}
+	},
+	//拜访modul函数
+	visitOk(e) {
+		this.setState({
+			addcontactModul:false,
+			visitModul: false
+		});
+	},
+	visitCancel(e) {
+		this.setState({
+			addcontactModul:false,
+			visitModul: false
+		});
+	},
+	
+	//详情保存
+	visitSubmit(e){
+		e.preventDefault();
+		this.setState({
+			loading: true
+		});
+		let contactsId = '';
+		if(this.state.keys) {
+			let conts = this.state.lastName;
+			contactsId = this.state.contactsIdArr[conts].id;
+		}
+		//新增
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			url: globalConfig.context + '/api/admin/customer/updateFollow',
+			data: {
+				followId: this.state.followIds,
+				userBusinessList: JSON.stringify(this.state.data),
+				uid: this.state.uid,
+				contactType: this.state.contactType,
+				result: this.state.result,
+				followTime: this.state.followTime,
+			}
+		}).done(function(data) {
+			this.setState({
+				loading: false
+			});
+			if(!data.error.length) {
+				message.success('保存成功!');
+				this.props.closeDesc(false,true);
+				this.visitCancel();
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+
+	},
+	componentWillReceiveProps(nextProps) {
+        if (nextProps.visitModul && nextProps.followData.followId) {
+            this.setState({
+				visitModul: true,
+				loading: true,
+			})
+			this.visitModify(nextProps.followData.followId)
+        };
+    },
+	render() {
+		const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+		return(
+			<div>
+				<Modal	
+				      className="customeDetails"
+				      footer=''
+			          title="客户跟进详情"
+			          width='1000px'
+			          visible={this.state.visitModul}
+			          onOk={this.visitOk}
+					  onCancel={this.visitCancel}							          							          
+			        >				    
+					    <Form layout="horizontal" id="demand-form" onSubmit={this.visitSubmit}>
+			    			<Spin spinning={this.state.loading}>
+			    			   	<div className="clearfix">
+			    			   		<FormItem 
+			                            labelCol={{ span:4 }}
+										wrapperCol={{ span: 20 }}
+			                            label="拜访方式" >
+			    			   			<Radio.Group value={this.state.contactType} onChange={(e) => {
+										        this.setState({ contactType: e.target.value }) 
+						                    }}>
+						                        <Radio value={0}>外出</Radio>
+						                        <Radio value={1}>电话</Radio>
+						                        <Radio value={2}>QQ</Radio>
+						                        <Radio value={3}>微信</Radio>
+						                        <Radio value={4}>邮箱</Radio>
+						                </Radio.Group>
+					                </FormItem>
+					                <div className="clearfix">
+						                <FormItem className="half-item"
+				                            {...formItemLayout}
+				                             label="当前联系人"
+				                             >
+						                    <span>{this.state.contacts}</span>
+						                </FormItem>
+						                <FormItem className="half-item"
+				                            {...formItemLayout}
+				                             label="跟进时间"
+				                             >
+						                	<span>{this.state.followTime}</span>
+						                </FormItem>
+						                <FormItem className="half-item"
+				                            {...formItemLayout}
+				                             label="联系电话"
+				                             >
+						                	<span>{this.state.contactMobile}</span>
+						                </FormItem>
+					                </div>
+					                <div className="clearfix">
+					                	<FormItem
+					                        labelCol={{ span: 4 }}
+							                wrapperCol={{ span: 16 }}
+					                        label="跟进备注" >
+					                            <Input type="textarea" rows={4} value={this.state.result} 
+					                              onChange={(e)=>{this.setState({result:e.target.value})}}/>
+					                    </FormItem>
+					                </div>
+					                <div className="clearfix">
+					                 	<div style={{fontSize:'18px',marginLeft:'100px',marginTop:'15px',marginBottom:'10px'}}>业务意向</div>
+					                 	<div className="clearfix">
+		                    			    <Spin spinning={this.state.loading}>
+										      <Table 
+										         rowKey={record => record.id}
+								            	 pagination={false}
+								            	 columns={this.state.intentionList} 
+								            	 dataSource={this.state.dataBus}
+								            	 />
+										    </Spin> 
+										</div>	 
+					                </div>
+			    			   	</div>
+			    			   	<FormItem wrapperCol={{ span: 12, offset: 6 }}>
+								    <Button  type="primary" size="large" htmlType="submit" style={{marginRight:'150px',marginTop:'20px'}}>保存</Button>
+						           	<Button  size="large" onClick={this.visitCancel}>取消</Button>
+					   			</FormItem>
+					   		</Spin>
+					    </Form>
+				</Modal> 
+			</div>
+		)
+	}
+})
+export default VisitDetail;

+ 228 - 0
js/component/manageCenter/customer/NEW/signCustomer/intentionDetail/intentionDetail.jsx

@@ -0,0 +1,228 @@
+import React from 'react';
+import {Modal,Tabs  } from 'antd';
+const TabPane = Tabs.TabPane;
+import Basic from './detail/basic.jsx';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import ContactPerson from './detail/contactPerson.jsx';  //联系人
+import Account from './detail/account.jsx';  //账户信息
+import Visit from './detail/visit.jsx'; 
+import Business from './detail/business.jsx';
+import BasicPerson from './detail/basicPerson.jsx';
+
+const IntentionDetail = React.createClass({
+	getInitialState(){
+		return{
+			modalVisible:false,
+			switchState:false,
+			contactData:[],
+			contactState:false,
+			IntentionState:false,
+			businessState:false,
+			visitState:false,
+			accountState:false,
+			basicState:false
+		}
+	},
+	detailsModal(){
+		this.setState({
+			basicState:false,
+			modalVisible:false
+		});
+		this.props.closeDesc(false,false);
+	},
+	//详情tab切换数据处理
+	callback(e) {
+		if(e == '1') {
+			this.setState({
+				contactState:false,
+				IntentionState:true,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:true
+			})
+		}
+		if(e == '2') {
+			this.setState({
+				IntentionState:false,
+				contactState:true,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '3') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:true,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '4') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:true,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '5') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:false,
+				businessState:true,
+				basicState:false
+			})
+		}
+/*		if(e == '6') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '7') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '8') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}
+		if(e == '9') {
+			this.setState({
+				IntentionState:false,
+				contactState:false,
+				accountState:false,
+				visitState:false,
+				businessState:false,
+				basicState:false
+			})
+		}*/
+		this.setState({
+			callnub: e,
+		})
+	},
+	//取消函数
+	closeDetail(e,s){
+		this.setState({
+			basicState:false,
+			modalVisible:e,
+		})
+		if(s){
+			this.props.closeDesc(false,true)
+		}
+	},
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.modalVisible && nextProps.IntentionData.id) {
+			this.setState({
+				modalVisible:true,
+				callnub:'1',
+			})
+		};
+		this.setState({
+			basicState:nextProps.basicState
+		})
+	},
+	render(){
+		return(
+			<div>
+				 <Modal	
+				      className="customeDetails"				      
+			          title="签单客户详情"
+			          width='1300px'
+			          visible={this.state.modalVisible}
+			          onOk={this.detailsModal}
+			          onCancel={this.detailsModal}
+			          footer=''
+			        >				    
+					     <Tabs onChange={this.callback} activeKey={this.state.callnub}>
+						    <TabPane tab="基本信息" key="1">
+						        {this.props.detailApi.indexOf('Organization')>0?<Basic 
+						        	detailApi={this.props.detailApi}
+						        	closeDetail={this.closeDetail}
+						        	data={this.props.IntentionData}
+						        	IntentionState={this.state.IntentionState}
+						        	basicState={this.state.basicState}
+						        />:<BasicPerson 
+						        	detailApi={this.props.detailApi}
+						        	closeDetail={this.closeDetail}
+						        	data={this.props.IntentionData}
+						        	IntentionState={this.state.IntentionState}
+						        	basicState={this.state.basicState}
+						        />
+						       }
+							</TabPane>
+						    <TabPane tab="联系人信息" key="2">
+						        <ContactPerson 
+							        closeDetail={this.closeDetail}
+							        data={this.props.IntentionData}
+							        contactState={this.state.contactState}
+							    />
+						    </TabPane>
+						    <TabPane tab="账户信息" key="3">
+						    		<Account 
+						    			 closeDetail={this.closeDetail}
+								         data={this.props.IntentionData}
+								         accountState={this.state.accountState}
+						    		/>
+						    </TabPane>
+							<TabPane tab="客户拜访" key="4">
+							     <Visit
+							     		closeDetail={this.closeDetail}
+								        data={this.props.IntentionData}
+								        visitState={this.state.visitState}
+							     />
+							</TabPane>						
+							<TabPane tab="业务意向" key="5">
+							    <Business 
+							    	closeDetail={this.closeDetail}
+								    data={this.props.IntentionData}
+								    businessState={this.state.businessState}
+							    />
+							</TabPane>
+							{/*
+							<TabPane tab="业务订单" key="6">
+							     								
+							</TabPane>
+							<TabPane tab="技术需求" key="7">
+							     								
+							</TabPane>
+							<TabPane tab="技术成果" key="8">
+							     								
+							</TabPane>
+							<TabPane tab="技术专家" key="9">
+							     								
+							</TabPane>
+							*/}
+						</Tabs>
+    			</Modal>
+			</div>
+		)
+	}
+})
+export default IntentionDetail;

+ 470 - 0
js/component/manageCenter/customer/NEW/signCustomer/signCustomer.jsx

@@ -0,0 +1,470 @@
+import React from 'react';
+import { Radio, Icon, Button, AutoComplete,Cascader,Input, Select, Spin, Popconfirm, Table, Switch, message, DatePicker, Upload, Form } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import { citySelect, provinceList } from '@/NewDicProvinceList';
+import { socialAttribute, industry, auditStatusL, lvl, currentMember } from '@/dataDic.js';
+import { getSocialAttribute, beforeUploadFile } from '@/tools.js';
+import FollowDetail from './followDetail.jsx'
+import IntentionDetail from './intentionDetail/intentionDetail.jsx'
+
+const IntentionCustomer = Form.create()(React.createClass({
+	loadData(pageNo, apiUrl) {
+		this.setState({
+			visitModul:false,
+			loading: true,
+			ispage:pageNo,
+			modalVisible:false
+		});
+		let api=apiUrl?apiUrl:this.props.ApiUrl;
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + api,
+			data: {
+				pageNo: pageNo || 1,
+				pageSize: this.state.pagination.pageSize,
+				name: this.state.nameSearch,
+				province: !(this.state.addressSearch).length ? this.state.provinceSearch : this.state.addressSearch[0],
+				city: !(this.state.addressSearch).length ? '' : this.state.addressSearch[1],
+				startDate: this.state.releaseDate[0],
+				endDate: this.state.releaseDate[1],
+			},
+			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.uid,
+							type: thisdata.type,
+							name: thisdata.name,
+							shareType:thisdata.shareType,
+							contacts:thisdata.contacts,
+							contactMobile:thisdata.contactMobile,
+							societyTag:thisdata.societyTag,
+							transferTime:thisdata.transferTime&&thisdata.transferTime.split(' ')[0],
+							lastSignTime:thisdata.lastSignTime&&thisdata.lastSignTime.split(' ')[0],
+							lastFollowTime:thisdata.lastFollowTime&&thisdata.lastFollowTime.split(' ')[0],
+							locationProvince: thisdata.province ? thisdata.province + '-' + thisdata.city+ '-' + thisdata.area : '--'
+						});
+					};
+					this.state.pagination.current = data.data.pageNo;
+				    this.state.pagination.total = data.data.totalCount;
+				};
+				if(data.data&&data.data.list&&!data.data.list.length){
+					this.state.pagination.current=0
+					this.state.pagination.total=0
+				};
+				this.setState({
+					dataSource: theArr,
+					pagination: this.state.pagination,
+					selectedRowKeys:[]
+				});
+			}.bind(this),
+		}).always(function() {
+			this.setState({
+				loading: false
+			});
+		}.bind(this));
+	},
+
+	getInitialState() {
+		return {
+			addressSearch: [],
+			orgCodeUrl: [],
+			companyLogoUrl: [],
+			visible: false,
+			searchMore: true,
+			releaseDate: [],
+			visitModul:false,
+			keys:false,
+			detailApi:'',
+			followData:{},
+			selectedRowKeys: [],
+			selectedRowKey: [],
+			selectedRows: [],
+			loading: false,
+			modalVisible: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: 'name',
+					key: 'name',
+				},{
+					title: '地区',
+					dataIndex: 'locationProvince',
+					key: 'locationProvince',
+				},
+				{
+					title: '最新签单日期',
+					dataIndex: 'lastSignTime',
+					key: 'lastSignTime',
+				},{
+					title: '最新跟进日期',
+					dataIndex: 'lastFollowTime',
+					key: 'lastFollowTime',
+				}, 
+				{
+					title: '联系人',
+					dataIndex: 'contacts',
+					key: 'contacts',
+				},
+				{
+					title: '联系电话',
+					dataIndex: 'contactMobile',
+					key: 'contactMobile',
+				},
+				{
+					title: '社会属性',
+					dataIndex: 'societyTag',
+					key: 'societyTag',
+					render:text=>{return getSocialAttribute(text) }
+				},
+				{
+					title: '操作',
+					dataIndex: 'abc',
+					key: 'abc',
+					render: (text, record, index) => {
+						return <div>
+                            <Button onClick={(e) =>{ e.stopPropagation(), this.visit(record)}} type="primary">客户跟进</Button>                            							    
+                        </div>
+					}
+				}
+			],
+			data: [],
+			dataSource: [],
+		};
+	},
+	
+	
+	
+	//进入新增拜访记录
+	visit(e) {
+		this.setState({
+			followData:e,
+			visitModul:true,
+			modalVisible:false
+		})
+	},
+	//列表删除功能
+	delectRow() {
+		let deletedIds;
+		for(let idx = 0; idx < this.state.selectedRows.length; idx++) {
+			let rowItem = this.state.selectedRows[idx];
+			if(rowItem.id) {
+				deletedIds = rowItem.id;
+			};
+		};
+		this.setState({
+			loading: true,
+			selectedRowKeys: [],
+		});
+		$.ajax({
+			method: "get",
+			dataType: "json",
+			crossDomain: false,
+			url: globalConfig.context + "/api/admin/customer/deleteCustomer",
+			data: {
+				uid: deletedIds, //删除的ID    
+			}
+		}).done(function(data) {
+			if(!data.error.length) {
+				message.success('删除成功!');
+				this.setState({
+					loading: false,
+				});
+			} else {
+				message.warning(data.error[0].message);
+			};
+			this.loadData(this.state.ispage);
+		}.bind(this));
+	},
+	componentWillMount() {
+		//城市
+		let Province = [];
+		provinceList.map(function(item) {
+			var id = String(item.id)
+			Province.push(
+				<Select.Option value={id} key={item.name}>{item.name}</Select.Option>
+			)
+		});
+		//行业
+		let intentionalArr = [];
+		industry.map(function(item) {
+			intentionalArr.push(
+				<Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+			)
+		});
+		this.state.Provinces = Province;
+		this.state.intentionalOption = intentionalArr;
+		this.loadData();
+	},
+	closeDesc(e, s) {
+		this.state.basicState=e
+		this.state.visitModul=e;
+		this.state.modalVisible=e;
+		this.state.showDesc = e;
+		if(s) {
+			this.loadData(this.state.ispage);
+		};
+	},
+	search() {
+		this.loadData();
+	},
+	reset() {
+		this.state.nameSearch = '';
+		this.state.addressSearch = [];
+		this.state.provinceSearch = undefined;
+		this.state.citySearch = undefined;
+		this.state.releaseDate[0] = undefined;
+		this.state.releaseDate[1] = undefined;
+		this.loadData();
+	},
+	searchSwitch() {
+		this.setState({
+			visitModul:false,
+			searchMore: !this.state.searchMore
+		});
+	},
+	//整行点击
+	tableRowClick(record, index) {
+		this.state.visitModul=false;
+		this.state.RowData = record;
+		this.setState({
+			selectedRowKeys: [],
+			modalVisible:true,
+			basicState:true
+		})
+	},
+	//指定转交人自动补全
+	supervisor(e){ 
+		$.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/customer/listAdminByName",
+            data:{
+            	adminName:e
+            },
+            success: function (data) {                	  
+				       let thedata=data.data;
+				    if (!thedata) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };	
+                    thedata = {}; 
+              }; 
+					this.setState({
+						customerArr:thedata,	
+                    });
+				}.bind(this),
+			}).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));  
+	},
+	//上级主管输入框失去焦点是判断客户是否存在
+	selectAuto(value,options){
+		this.setState({
+			auto:value
+		})
+	},
+	blurChange(e){
+		let theType='';
+		let contactLists=this.state.customerArr||[];
+			if (e) {
+            contactLists.map(function (item) {
+                if (item.name == e.toString()) {
+                    theType = item.id;
+                }
+           });     
+   	    }
+		this.setState({
+			theTypes:theType
+		})
+	},
+	//值改变时请求客户名称
+	httpChange(e){
+		if(e.length>=1){
+			this.supervisor(e); 
+		}	
+		this.setState({
+			auto:e
+		})
+	},
+	//转交
+	changeAssigner() {
+		if(this.state.theTypes){
+			this.setState({
+				selectedRowKeys: [],
+			});
+			let changeIds;
+			for(let idx = 0; idx < this.state.selectedRows.length; idx++) {
+				let rowItem = this.state.selectedRows[idx];
+				if(rowItem.id) {
+					changeIds = rowItem.id;
+					
+				};
+			};
+			$.ajax({
+				method: "get",
+				dataType: "json",
+				crossDomain: false,
+				url: globalConfig.context + "/api/admin/customer/transferToOther",
+				data: {
+					uid: changeIds, //这一行数据的ID
+					aid: this.state.theTypes, //指定转交人的ID 
+				}
+			}).done(function(data) {
+				if(!data.error.length) {
+					message.success('转交成功!');
+					this.setState({
+						auto:'',
+						loading: false,
+					});
+				} else {
+					message.warning(data.error[0].message);
+				};
+				this.loadData(this.state.ispage);
+			}.bind(this));
+		}else{
+			message.warning('请输入转交人姓名')
+		}
+	},
+
+	componentWillReceiveProps(nextProps) {
+		if(nextProps.ApiUrl!=this.props.ApiUrl) {
+			if(!this.state.searchMore){
+				this.state.searchMore=true
+			}
+			this.loadData(null,nextProps.ApiUrl);
+		};
+	},
+	render() {
+		const FormItem = Form.Item;
+		const rowSelection = {
+			selectedRowKeys: this.state.selectedRowKeys,
+			onChange: (selectedRowKeys, selectedRows) => {
+				this.setState({
+					modalVisible:false,
+					selectedRows: selectedRows.slice(-1),
+					selectedRowKeys: selectedRowKeys.slice(-1)
+				});
+			},
+			onSelect: (recordt, selected, selectedRows) => {
+				this.setState({
+					modalVisible:false,
+					recordt: recordt.id
+				})
+			},
+		};
+		const hasSelected = this.state.selectedRowKeys.length > 0;
+		const { RangePicker } = DatePicker;
+		const dataSources=this.state.customerArr || [];
+        const options = dataSources.map((group) =>
+				      <Select.Option key={group.id} value={group.name}>{group.name}</Select.Option>
+				     )
+        const intentionState = this.props.intentionState ||'';
+		return(
+			<div className="user-content" >
+                <div className="content-title">                  
+                    <span>{!intentionState?'我的单位签单客户':'我的个人签单客户'}</span>
+                </div>
+                <div className="user-search">                    
+                    <Input placeholder="客户名称"
+                        value={this.state.nameSearch}
+                        onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />    
+                    <Select placeholder="省"
+                            style={{ width: 80 }}
+                            value={this.state.provinceSearch}
+                            onChange={(e) => {this.setState({ provinceSearch: e});}}>
+                            {this.state.Provinces}
+                    </Select> 
+                    <span style={{marginRight:'10px'}}>                   
+	                     <Cascader options={citySelect()}  value={this.state.addressSearch} placeholder="选择城市"
+    						onChange={(e,pre) => { this.setState({ addressSearch: e }) }} />	                 
+                    </span>
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button>                      
+	               {adminData.isSuperAdmin?<Popconfirm title="是否删除?" onConfirm={this.delectRow} okText="是" cancelText="否">
+							     <Button type="danger" style={{marginLeft:'10px'}}
+	                       			 disabled={!hasSelected} 
+	                       		 >删除<Icon type="minus" />
+	                        </Button>
+	                </Popconfirm>:''
+	                }
+	                <AutoComplete
+				        className="certain-category-search"
+				        dropdownClassName="certain-category-search-dropdown"
+				        dropdownMatchSelectWidth={false}
+				        dropdownStyle={{ width: 120 }}
+				        style={{ width: '120px'}}
+				        dataSource={options}
+				        placeholder="输入转交人姓名"
+				        value={this.state.auto}
+				        onChange={this.httpChange}
+				        filterOption={true}
+				        onBlur={this.blurChange}
+				        onSelect={this.selectAuto}
+				        disabled={!hasSelected}
+				      >
+				        <Input />
+				      </AutoComplete>  
+					<Button type="primary" onClick={this.changeAssigner}  disabled={!hasSelected} >转交</Button>  
+	                <span style={{marginLeft:'10px',marginRight:'20px'}}>更多搜索<Switch checked={!this.state.searchMore} onChange={this.searchSwitch} /></span>
+                    <div className='clearfix' style={{marginTop:'5px'}}>
+	                  <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>                    			                  
+			                <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 }); }} />    
+			            </div>  
+		            </div>
+                </div>                                               
+                <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> 
+    			<FollowDetail 
+    				followData={this.state.followData}
+    				visitModul={this.state.visitModul}
+    				closeDesc={this.closeDesc}
+    			/>
+    			<IntentionDetail 
+    				detailApi={this.props.detailApi}
+    				IntentionData={this.state.RowData}
+    				modalVisible={this.state.modalVisible}
+    				closeDesc={this.closeDesc}
+    				basicState={this.state.basicState}
+    			/>
+          </div >
+		);
+	}
+}));
+export default IntentionCustomer;

+ 148 - 41
js/component/manageCenter/customer/content.jsx

@@ -35,25 +35,25 @@ class Content extends Component {
                 require.ensure([], () => {
                     const MyClient = require('./customerData/myClient').default;
                     this.setState({
-                        component: <MyClient />                      
+                        component: <MyClient ApiUrl={''}/>                      
                     });
                 });
                 break;
-           // 单位客户查询
-            case 'organizationQuery':
-                require.ensure([], () => {
-	                const CompanyCustomer = require('./customerData/companyCustomer').default;
-	                this.setState({
-	                    component:<CompanyCustomer />,	                    	                  
-	                });
-          	    });
-          	    break;
+//         // 单位客户查询
+//          case 'organizationQuery':
+//              require.ensure([], () => {
+//	                const CompanyCustomer = require('./customerData/companyCustomer').default;
+//	                this.setState({
+//	                    component:<CompanyCustomer ApiUrl={''}/>,	                    	                  
+//	                });
+//        	    });
+//        	    break;
           	//我的个人客户
           	case 'myPersonal':
                 require.ensure([], () => {
                     const IndividualCustomer = require('./individualCustomer/individualCustomer').default;
                     this.setState({
-                        component: <IndividualCustomer />                      
+                        component: <IndividualCustomer ApiUrl={''}/>                      
                       
                     });
                 });
@@ -63,26 +63,26 @@ class Content extends Component {
                 require.ensure([], () => {
                     const MyReject = require('./individualCustomer/myReject').default;
                     this.setState({
-                        component: <MyReject />                      
+                        component: <MyReject ApiUrl={''}/>                      
                       
                     });
                 });
                 break; 
-            //个人客户查询
-            case 'personalQuery':
-                require.ensure([], () => {
-	                const QueryCustomer = require('./individualCustomer/queryCustomer').default;
-	                this.setState({
-	                    component:<QueryCustomer />,	                    	                  
-	                });
-          	    });
-          	    break;
+//          //个人客户查询
+//          case 'personalQuery':
+//              require.ensure([], () => {
+//	                const QueryCustomer = require('./individualCustomer/queryCustomer').default;
+//	                this.setState({
+//	                    component:<QueryCustomer ApiUrl={''}/>,	                    	                  
+//	                });
+//        	    });
+//        	    break;
           	//专家查询
 			case 'expertQuery':
                 require.ensure([], () => {
 	                const ExpertQuery = require('./individualCustomer/expertQuery').default;
 	                this.setState({
-	                    component:<ExpertQuery />,	                    	                  
+	                    component:<ExpertQuery ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -91,7 +91,7 @@ class Content extends Component {
                 require.ensure([], () => {
 	                const Qublicquery = require('./individualCustomer/publicQuery').default;
 	                this.setState({
-	                    component:<Qublicquery />,	                    	                  
+	                    component:<Qublicquery ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -100,7 +100,7 @@ class Content extends Component {
                 require.ensure([], () => {
 	                const PersonalManage = require('./customerManagement/personalManages').default;
 	                this.setState({
-	                    component:<PersonalManage />,	                    	                  
+	                    component:<PersonalManage ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -109,7 +109,7 @@ class Content extends Component {
                 require.ensure([], () => {
 	                const ExpertManage = require('./customerManagement/expertManage').default;
 	                this.setState({
-	                    component:<ExpertManage />,	                    	                  
+	                    component:<ExpertManage ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -118,7 +118,7 @@ class Content extends Component {
                 require.ensure([], () => {
 	                const ExpertReview = require('./reviewed/expertReview').default;
 	                this.setState({
-	                    component:<ExpertReview />,	                    	                  
+	                    component:<ExpertReview ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -127,7 +127,7 @@ class Content extends Component {
                 require.ensure([], () => {
 	                const IdentityAudits = require('./reviewed/identityAudits').default;
 	                this.setState({
-	                    component:<IdentityAudits />,	                    	                  
+	                    component:<IdentityAudits ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -136,7 +136,7 @@ class Content extends Component {
                 require.ensure([], () => {
 	                const EnteringAudit = require('./reviewed/enteringAudit').default;
 	                this.setState({
-	                    component:<EnteringAudit />,	                    	                  
+	                    component:<EnteringAudit ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -145,7 +145,7 @@ class Content extends Component {
                 require.ensure([], () => {
 	                const ExpertRelease = require('./release/expertRelease').default;
 	                this.setState({
-	                    component:<ExpertRelease />,	                    	                  
+	                    component:<ExpertRelease ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -154,7 +154,7 @@ class Content extends Component {
                 require.ensure([], () => {
 	                const ReleaseExpert = require('./release/releaseExpert').default;
 	                this.setState({
-	                    component:<ReleaseExpert />,	                    	                  
+	                    component:<ReleaseExpert ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -163,7 +163,7 @@ class Content extends Component {
                 require.ensure([], () => {
 	                const PublicManages = require('./customerManagement/publicManages').default;
 	                this.setState({
-	                    component:<PublicManages />,	                    	                  
+	                    component:<PublicManages ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -172,7 +172,7 @@ class Content extends Component {
                 require.ensure([], () => {
 	                const OrganizationManage = require('./customerManagement/organizationManages').default;
 	                this.setState({
-	                    component:<OrganizationManage />,	                    	                  
+	                    component:<OrganizationManage ApiUrl={''}/>,	                    	                  
 	                });
           	    });
           	    break;
@@ -181,7 +181,7 @@ class Content extends Component {
 	            require.ensure([], () => {
 	                const MyBusiness = require('./customerService/myBusiness').default;
 	                this.setState({
-	                    component:<MyBusiness />,	                                      
+	                    component:<MyBusiness ApiUrl={''}/>,	                                      
 	                });
 	      	    });
 	      	    break;
@@ -190,7 +190,7 @@ class Content extends Component {
 	            require.ensure([], () => {
 	                const BusinessMange = require('./customerService/businessManges').default;
 	                this.setState({
-	                    component:<BusinessMange />,	                                      
+	                    component:<BusinessMange ApiUrl={''}/>,	                                      
 	                });
 	      	    });
 	      	    break;
@@ -199,7 +199,7 @@ class Content extends Component {
             require.ensure([], () => {
                 const ServiceQuery = require('./customerService/serviceQuery').default;
                 this.setState({
-                    component:<ServiceQuery />,	                                      
+                    component:<ServiceQuery ApiUrl={''}/>,	                                      
                 });
       	    });
       	    break;
@@ -208,7 +208,7 @@ class Content extends Component {
             require.ensure([], () => {
                 const VisitStatistics = require('./statistics/visitStatistics').default;
                 this.setState({
-                    component:<VisitStatistics />,	                                      
+                    component:<VisitStatistics ApiUrl={''}/>,	                                      
                 });
       	    });
       	    break;
@@ -217,7 +217,7 @@ class Content extends Component {
             require.ensure([], () => {
                 const StatusStatistics = require('./statistics/statusStatistics').default;
                 this.setState({
-                    component:<StatusStatistics />,	                                      
+                    component:<StatusStatistics ApiUrl={''}/>,	                                      
                 });
       	    });
       	    break;
@@ -226,7 +226,7 @@ class Content extends Component {
             require.ensure([], () => {
                 const FollowStatistics = require('./statistics/followStatistics').default;
                 this.setState({
-                    component:<FollowStatistics />,	                                      
+                    component:<FollowStatistics ApiUrl={''}/>,	                                      
                 });
       	    });
       	    break;
@@ -237,7 +237,7 @@ class Content extends Component {
                 require.ensure([], () => {
                     const Jurisdiction = require('./report/personalReport').default;
                     this.setState({
-                        component: <Jurisdiction />                      
+                        component: <Jurisdiction ApiUrl={''}/>                      
                     });
                 });
                 break;  
@@ -245,17 +245,124 @@ class Content extends Component {
                 require.ensure([], () => {
                     const DepartmentReport = require('./report/departmentReport').default;
                     this.setState({
-                        component: <DepartmentReport />                      
+                        component: <DepartmentReport ApiUrl={''}/>                      
+                    });
+                });
+                break;
+            /*意向客户*/
+            //个人意向客户
+           	case 'personalIntention':
+                require.ensure([], () => {
+                    const PersonalIntention = require('./NEW/intentionCustomer/intentionCustomer').default;
+                    this.setState({
+                        component: <PersonalIntention
+                        			intentionState={1}
+                        		    ApiUrl={'/api/admin/customer/listPrivatePersonalCustomer'}
+                        		    detailApi={'/api/admin/customer/findPersonalCustomerDetail'}
+                        			/>
+                    });
+                });
+                break;
+            //单位意向客户    
+            case 'companyIntention':
+                require.ensure([], () => {
+                    const CompanyIntention = require('./NEW/intentionCustomer/intentionCustomer').default;
+                    this.setState({
+                        component: <CompanyIntention 
+	                        		intentionState={0}
+	                        		ApiUrl={'/api/admin/customer/listPrivateOrganizationCustomer'}
+	                        		detailApi={'/api/admin/customer/findOrganizationCustomerDetail'}
+                        		/>
+                    });
+                });
+                break;
+            /*签单客户*/ 
+            //个人签单客户
+            case 'personalSign':
+                require.ensure([], () => {
+                    const PersonalSign = require('./NEW/signCustomer/signCustomer').default;
+                    this.setState({
+                        component: <PersonalSign 
+                    			intentionState={1}
+                    		    ApiUrl={'/api/admin/customer/listSignPersonalCustomer'}
+                    		    //ApiUrl={'/api/admin/customer/listPrivatePersonalCustomer'}
+                    		    detailApi={'/api/admin/customer/findPersonalCustomerDetail'}
+                        />
                     });
                 });
                 break;
+            //单位签单客户    
+            case 'companySign':
+                require.ensure([], () => {
+                    const CompanySign =  require('./NEW/signCustomer/signCustomer').default;
+                    this.setState({
+                        component: <CompanySign 
+                    			intentionState={0}
+                        		ApiUrl={'/api/admin/customer/listSignOrganizationCustomer'}
+                        		detailApi={'/api/admin/customer/findOrganizationCustomerDetail'}/>                      
+                    });
+                });
+                break;
+             //个人客户查询
+            case 'personalQuery':
+                require.ensure([], () => {
+                    const PersonalQuery = require('./NEW/query/queryCutomer').default;
+                    this.setState({
+                        component: <PersonalQuery 
+                			intentionState={1}
+                		    ApiUrl={'/api/admin/customer/listAllPersonalCustomer'}	
+                		    detailApi={'/api/admin/customer/getLockedProject'}
+                        />
+                    });
+                });
+                break;
+            //单位客户查询    
+            case 'organizationQuery':
+                require.ensure([], () => {
+                    const CompanyQuery =  require('./NEW/query/queryCutomer').default;
+                    this.setState({
+                        component: <CompanyQuery 
+                			intentionState={0}
+                    		ApiUrl={'/api/admin/customer/listAllOrganizationCustomer'}
+                    		detailApi={'/api/admin/customer/getLockedProject'}
+                    	/>	
+                    });
+                });
+                break;  
+             //个人公共客户
+            case 'personalPublicCustomer':
+                require.ensure([], () => {
+                    const PersonalPublicCustomer = require('./NEW/publicCustomer/publicCustomer').default;
+                    this.setState({
+                        component: <PersonalPublicCustomer 
+                			intentionState={1}
+                		    ApiUrl={'/api/admin/customer/listPublicPersonalCustomer'}	
+                        />
+                    });
+                });
+                break;
+            //单位公共客户    
+            case 'organizationPublicCustomer':
+                require.ensure([], () => {
+                    const OrganizationPublicCustomer =  require('./NEW/publicCustomer/publicCustomer').default;
+                    this.setState({
+                        component: <OrganizationPublicCustomer 
+                			intentionState={0}
+                    		ApiUrl={'/api/admin/customer/listPublicOrganizationCustomer'}
+                    	/>	
+                    });
+                });
+                break;     
       	    default:
             require.ensure([], () => {
                 const Module = require('../module').default;
                 this.setState({
-                    component:<Module />	    
+                    component:<Module ApiUrl={''}/>	    
                 	});
                 });  
+           
+           
+                
         };
         window.location.hash = key;
     }

+ 1 - 1
js/component/manageCenter/customer/customerData/companyCustomer.jsx

@@ -134,7 +134,7 @@ const PublicCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo;
 				    this.state.pagination.total = data.data.totalCount;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0;
 					this.state.pagination.total=0;
 				}

+ 1 - 2
js/component/manageCenter/customer/customerData/myClient.jsx

@@ -132,7 +132,7 @@ const MyClient = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo;
 				    this.state.pagination.total = data.data.totalCount;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0
 					this.state.pagination.total=0
 				}
@@ -1632,7 +1632,6 @@ const MyClient = Form.create()(React.createClass({
 					this.state.paginations.total = data.data.totalCount;
 				};
 				this.setState({
-
 					visitArrList: theArr,
 					paginations: this.state.paginations
 				});

+ 1 - 1
js/component/manageCenter/customer/customerManagement/expertManage.jsx

@@ -142,7 +142,7 @@ const QueryCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo ;
 					this.state.pagination.total = data.data.totalCount ;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0
 					this.state.pagination.total=0
 				}

+ 1 - 1
js/component/manageCenter/customer/customerManagement/organizationManages.jsx

@@ -135,7 +135,7 @@ const PublicCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo;
 				    this.state.pagination.total = data.data.totalCount;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0;
 					this.state.pagination.total=0;
 				}

+ 1 - 1
js/component/manageCenter/customer/customerManagement/personalManages.jsx

@@ -142,7 +142,7 @@ const QueryCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo ;
 					this.state.pagination.total = data.data.totalCount ;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0
 					this.state.pagination.total=0
 				}

+ 1 - 1
js/component/manageCenter/customer/customerManagement/publicManages.jsx

@@ -180,7 +180,7 @@ const PublicCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo;
 				    this.state.pagination.total = data.data.totalCount;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0;
 					this.state.pagination.total=0;
 				}

+ 1 - 1
js/component/manageCenter/customer/customerService/businessManges.jsx

@@ -59,7 +59,7 @@ const MyBusiness = Form.create()(React.createClass({
                     this.state.pagination.current = data.data.pageNo;
                	    this.state.pagination.total = data.data.totalCount;
                 };
-                if(!data.data.list.length){
+              if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0;
 					this.state.pagination.total=0;
 				}

+ 1 - 1
js/component/manageCenter/customer/customerService/myBusiness.jsx

@@ -60,7 +60,7 @@ const MyBusiness = Form.create()(React.createClass({
                     this.state.pagination.current = data.data.pageNo;
                	    this.state.pagination.total = data.data.totalCount;
                 };
-                if(!data.data.list.length){
+                if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0;
 					this.state.pagination.total=0;
 				}

+ 1 - 1
js/component/manageCenter/customer/customerService/serviceQuery.jsx

@@ -57,7 +57,7 @@ const ServiceQuery= Form.create()(React.createClass({
                     this.state.pagination.current = data.data.pageNo;
                     this.state.pagination.total = data.data.totalCount;
                 };
-                if(!data.data.list.length){
+                if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0;
 					this.state.pagination.total=0;
 				}

+ 2 - 2
js/component/manageCenter/customer/individualCustomer/expertQuery.jsx

@@ -75,7 +75,7 @@ const QueryCustomer = Form.create()(React.createClass({
 			method: "post",
 			dataType: "json",
 			crossDomain: false,
-			url: globalConfig.context + '/api/admin/customer/listPersonalCustomer',
+			url: globalConfig.context + '/api/admin/customer/listExpertCustomer',
 			data: {
 				pageNo: pageNo || 1,
 				pageSize: this.state.pagination.pageSize,
@@ -140,7 +140,7 @@ const QueryCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo ;
 					this.state.pagination.total = data.data.totalCount ;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0
 					this.state.pagination.total=0
 				}

+ 1 - 1
js/component/manageCenter/customer/individualCustomer/individualCustomer.jsx

@@ -140,7 +140,7 @@ const IndividualCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo;
 				    this.state.pagination.total = data.data.totalCount;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0;
 					this.state.pagination.total=0;
 				}

+ 0 - 0
js/component/manageCenter/customer/individualCustomer/intentionCustomer/personalIntention.jsx


+ 1 - 1
js/component/manageCenter/customer/individualCustomer/myReject.jsx

@@ -54,7 +54,7 @@ const PublicCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo;
 				    this.state.pagination.total = data.data.totalCount;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0;
 					this.state.pagination.total=0;
 				}

+ 1 - 1
js/component/manageCenter/customer/individualCustomer/myRejectOne.jsx

@@ -52,7 +52,7 @@ const QueryCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo;
 				    this.state.pagination.total = data.data.totalCount;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0;
 					this.state.pagination.total=0;
 				}

+ 1 - 1
js/component/manageCenter/customer/individualCustomer/publicQuery.jsx

@@ -135,7 +135,7 @@ const PublicCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo;
 				    this.state.pagination.total = data.data.totalCount;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0;
 					this.state.pagination.total=0;
 				}

+ 1 - 1
js/component/manageCenter/customer/individualCustomer/publicQueryOne.jsx

@@ -140,7 +140,7 @@ const QueryCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo ;
 					this.state.pagination.total = data.data.totalCount ;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0
 					this.state.pagination.total=0
 				}

+ 1 - 1
js/component/manageCenter/customer/individualCustomer/queryCustomer.jsx

@@ -140,7 +140,7 @@ const QueryCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo ;
 					this.state.pagination.total = data.data.totalCount ;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0
 					this.state.pagination.total=0
 				}

+ 1 - 1
js/component/manageCenter/customer/release/expertRelease.jsx

@@ -143,7 +143,7 @@ const QueryCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo ;
 					this.state.pagination.total = data.data.totalCount ;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0
 					this.state.pagination.total=0
 				}

+ 4 - 0
js/component/manageCenter/customer/release/releaseExpert.jsx

@@ -64,6 +64,10 @@ const Organization=Form.create()(React.createClass({
                     this.state.pagination.current = data.data.pageNo;
                     this.state.pagination.total = data.data.totalCount;
                 };
+                if(data.data&&data.data.list&&!data.data.list.length){
+					this.state.pagination.current=0
+					this.state.pagination.total=0
+				};
                 this.setState({
                     dataSource: theArr,
                     pagination: this.state.pagination

+ 1 - 1
js/component/manageCenter/customer/reviewed/expertReview.jsx

@@ -142,7 +142,7 @@ const QueryCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo ;
 					this.state.pagination.total = data.data.totalCount ;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0
 					this.state.pagination.total=0
 				}

+ 1 - 1
js/component/manageCenter/customer/reviewed/identityAuditsOne.jsx

@@ -143,7 +143,7 @@ const QueryCustomer = Form.create()(React.createClass({
 					this.state.pagination.current = data.data.pageNo ;
 					this.state.pagination.total = data.data.totalCount ;
 				};
-				if(!data.data.list.length){
+				if(data.data&&data.data.list&&!data.data.list.length){
 					this.state.pagination.current=0
 					this.state.pagination.total=0
 				}

+ 1 - 32
js/component/manageCenter/leftTab.less

@@ -7,43 +7,12 @@
         float: left;
         border-right: none;
         overflow-y: auto;
-        //background: #e8f2fc;
         .ant-menu-submenu {
             .ant-menu-submenu-title {
-                //         padding: 0!important;
-                //         margin: 0;
-                //         border-right: none;
-                //         text-align: center;
                 font-size: 16px;
-                //         color: #4466bf;
-                //         background: #d5e4f7;
-                //         border-top: 1px solid #f2f8fd;
-                //         border-bottom: 1px solid #c0d2e4;
-                //         &:after {
-                //             font-size: 24px;
-                //         } 
             }
         }
-        //.ant-menu-submenu-selected {
-        //     .ant-menu-submenu-title {
-        //         background: #fff;
-        //border-left: 3px solid #58a3ff;
-        //     }
-        //}
-        // .ant-menu-item {
-        //     padding-left: 0!important;
-        //     text-align: center;
-        //     background: #fafafa;
-        //     font-size: 14px;
-        //     color: #333;
-        //     border-bottom: 1px solid #c0d2e4;
-        // }
-        // .ant-menu-item-selected {
-        //     background: #fff;
-        //     color: #4466bf;
-        //     font-size: 16px;
-        //     border-right: none;
-        // }
+      
     }
 }
 .containers{

+ 14 - 3
js/component/manageCenter/order/myOrder/servicesOrder/addService.jsx

@@ -120,6 +120,7 @@ const NewService = Form.create()(React.createClass({
 			loading: false,
 			visible: false,
 			orgCodeUrl:[],
+			customerArr:[],
 			bussStats:false,
 			checkedKeys: [],
 			lookflowList:[],
@@ -487,14 +488,15 @@ const NewService = Form.create()(React.createClass({
 	},
 	//加载(自动补全)
 	supervisor(e,state){ //客户名称与服务名称自动补全
-		let api=state?'/api/admin/customer/findCustomerByName':'/api/admin/order/getBusinessProjectByName';
+		let api=state?'/api/admin/customer/getCustomerByName':'/api/admin/order/getBusinessProjectByName';
 		$.ajax({
             method: "get",
             dataType: "json",
             crossDomain: false,
             url: globalConfig.context + api,
             data:state?{
-            	name:e
+            	name:e,
+            	type:this.state.customType
             }:{
             	businessName:e
             },
@@ -561,7 +563,7 @@ const NewService = Form.create()(React.createClass({
 	//客户名称自动补全
 	customerChange(e){
 		this.state.autoId='';
-		if(e.length>=1){
+		if(e.length>=2){
 			this.supervisor(e,true); 
 		}	
 		this.setState({
@@ -1122,6 +1124,7 @@ const NewService = Form.create()(React.createClass({
 				customerArr:[],
 				contractType:undefined,
 				bussStats:false,
+				customType:0
 			})
 		}
 	},
@@ -1189,6 +1192,14 @@ const NewService = Form.create()(React.createClass({
 							                    		<span className="mandatory">*</span>
 							                    </FormItem>
 							                </div>}
+							                <FormItem 
+					                            {...formItemLayout}
+					                            label="客户所属类型" > 
+					                            <Radio.Group onChange={(e)=>{this.setState({customType:e.target.value,customerArr:[]})}} value={this.state.customType}>
+											        <Radio value={0}>私有客户</Radio>
+											        <Radio value={1}>已签单客户</Radio>
+											    </Radio.Group>
+							                </FormItem>
 							                <div className="clearfix">
 							                    <FormItem 
 							                            {...formItemLayout}

+ 1 - 1
js/component/manageCenter/order/userMangagement.less

@@ -77,7 +77,7 @@
 .setSave,.operations,.cancel{
     float: left;
 }
-.setSave{margin-right: 10px;margin-left: 150px;}
+.setSave{margin-right: 10px;margin-left: 188px;}
 .toVoid{float: left;margin-right: 10px;}
 .btnSave{text-align: center;margin-top: 10px;overflow: hidden;}
 .ant-calendar-picker{vertical-align: top;margin-top: 11px;}

+ 4 - 0
js/component/manageCenter/servicesManage/projectOrder/myTask/projectManage.jsx

@@ -413,6 +413,9 @@ const MyTask=Form.create()(React.createClass({
         this.loadData();
         this.businessList()
     },
+    close(s){
+    	this.state.showDesc=s
+    },
     //启动
   	startUp(record){
   		this.removeList(true,record)
@@ -570,6 +573,7 @@ const MyTask=Form.create()(React.createClass({
 	                    </Spin>
 	                </div>
 	                <MySettlementDetaile
+	                	close={this.close}
 	                    datauser={this.state.datauser}
 	                    showDesc={this.state.showDesc}
 	                    closeShow={this.closeShow}

+ 4 - 0
js/component/manageCenter/servicesManage/projectOrder/taskManagement/projectManage.jsx

@@ -419,6 +419,9 @@ const TaskManagement=Form.create()(React.createClass({
             showDesc: true
         });
     },
+    close(s){
+    	this.state.showDesc=s;
+    },
     searchOrder(){
     	this.contactList();
     },
@@ -538,6 +541,7 @@ const TaskManagement=Form.create()(React.createClass({
 	                    </Spin>
 	                </div>
 	                <MySettlementDetaile
+	                	close={this.close}
 	                    datauser={this.state.datauser}
 	                    showDesc={this.state.showDesc}
 	                    closeShow={this.closeShow}

+ 2 - 1
webpack.config.js

@@ -306,7 +306,8 @@ module.exports = (function () {
         resolve: {
         	alias:{
             	'@':__dirname+'/js/component',
-           },
+          },
+        		
             extensions: ['.js', '.jsx']
            
         },