intentionCustomer.jsx 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744
  1. import React from 'react';
  2. import { Radio, Icon, Button, AutoComplete,Cascader,Input, Select, Spin, Popconfirm, Table, Switch, message, DatePicker, Upload, Form,Tabs } from 'antd';
  3. import ajax from 'jquery/src/ajax/xhr.js';
  4. import $ from 'jquery/src/ajax';
  5. import moment from 'moment';
  6. import { citySelect, provinceList } from '@/NewDicProvinceList';
  7. import AddIntention from './addIntention.jsx';
  8. import { socialAttribute, industry, auditStatusL, lvl, currentMember } from '@/dataDic.js';
  9. import {
  10. getSocialAttribute,
  11. beforeUploadFile,
  12. getLevel,
  13. ShowModal
  14. } from "@/tools.js";
  15. import FollowDetail from './followDetail.jsx'
  16. import IntentionDetail from './intentionDetail/intentionDetail.jsx'
  17. import ShowModalDiv from "@/showModal.jsx";
  18. import './customer.less';
  19. const {TabPane} = Tabs
  20. const IntentionCustomer = Form.create()(React.createClass({
  21. loadData(pageNo, apiUrl) {
  22. this.setState({
  23. visitModul:false,
  24. loading: true,
  25. ispage:pageNo,
  26. modalVisible:false
  27. });
  28. let api=apiUrl?apiUrl:this.props.ApiUrl;
  29. $.ajax({
  30. method: "post",
  31. dataType: "json",
  32. crossDomain: false,
  33. url: globalConfig.context + api,
  34. data: {
  35. pageNo: pageNo || 1,
  36. pageSize: this.state.pagination.pageSize,
  37. level:this.state.level?this.state.level:undefined,
  38. name: this.state.nameSearch,
  39. province: !(this.state.addressSearch).length ? this.state.provinceSearch : this.state.addressSearch[0],
  40. city: !(this.state.addressSearch).length ? '' : this.state.addressSearch[1],
  41. startDate: this.state.releaseDate[0],
  42. endDate: this.state.releaseDate[1],
  43. },
  44. success: function(data) {
  45. ShowModal(this);
  46. let theArr = [];
  47. if(data.error.length || data.data.list == "") {
  48. if(data.error && data.error.length) {
  49. message.warning(data.error[0].message);
  50. };
  51. } else {
  52. for(let i = 0; i < data.data.list.length; i++) {
  53. let thisdata = data.data.list[i];
  54. let diqu=(thisdata.province==null?"":thisdata.province)+(thisdata.city==null?"":"-"+thisdata.city)+(thisdata.area==null?"":"-"+thisdata.area);
  55. theArr.push({
  56. key: i,
  57. id: thisdata.uid,
  58. aid:thisdata.aid,
  59. name: thisdata.name,
  60. contacts: thisdata.contacts,
  61. contactMobile: thisdata.contactMobile,
  62. industry: thisdata.industry,
  63. societyTag: thisdata.societyTag,
  64. lastFollowTime:thisdata.lastFollowTime&&thisdata.lastFollowTime.split(' ')[0],
  65. transferTime:thisdata.transferTime&&thisdata.transferTime.split(' ')[0],
  66. surplusFollowTime:thisdata.surplusFollowTime&&thisdata.surplusFollowTime.split(' ')[0],
  67. surplusSignTime:thisdata.surplusSignTime&&thisdata.surplusSignTime.split(' ')[0],
  68. locationProvince: diqu,
  69. level:thisdata.level,
  70. });
  71. };
  72. this.state.pagination.current = data.data.pageNo;
  73. this.state.pagination.total = data.data.totalCount;
  74. };
  75. if(data.data&&data.data.list&&!data.data.list.length){
  76. this.state.pagination.current=0
  77. this.state.pagination.total=0
  78. }
  79. this.setState({
  80. dataSource: theArr,
  81. pagination: this.state.pagination,
  82. selectedRowKeys:[]
  83. });
  84. }.bind(this),
  85. }).always(function() {
  86. this.setState({
  87. loading: false
  88. });
  89. }.bind(this));
  90. },
  91. //品类数据获取
  92. category(){
  93. $.ajax({
  94. method: "get",
  95. dataType: "json",
  96. crossDomain: false,
  97. url: globalConfig.context + "/api/admin/Varieties/getSuperList",
  98. data: {
  99. },
  100. success: function(data) {
  101. let thedata = data.data;
  102. let theArr=[];
  103. if(!thedata) {
  104. if(data.error && data.error.length) {
  105. message.warning(data.error[0].message);
  106. };
  107. thedata = {};
  108. }else{
  109. thedata.map(function(item,index){
  110. theArr.push({
  111. value:item.id,
  112. key:item.cname,
  113. })
  114. })
  115. }
  116. this.setState({
  117. categoryArr:theArr,
  118. })
  119. }.bind(this),
  120. });
  121. },
  122. getInitialState() {
  123. return {
  124. addressSearch: [],
  125. orgCodeUrl: [],
  126. companyLogoUrl: [],
  127. visible: false,
  128. searchMore: true,
  129. releaseDate: [],
  130. categoryArr:[],
  131. visitModul:false,
  132. keys:false,
  133. detailApi:'',
  134. followData:{},
  135. selectedRowKeys: [],
  136. selectedRowKey: [],
  137. selectedRows: [],
  138. loading: false,
  139. modalVisible:false,
  140. pagination: {
  141. defaultCurrent: 1,
  142. defaultPageSize: 10,
  143. showQuickJumper: true,
  144. pageSize: 10,
  145. onChange: function(page) {
  146. this.loadData(page);
  147. }.bind(this),
  148. showTotal: function(total) {
  149. return '共' + total + '条数据';
  150. }
  151. },
  152. columns: [{
  153. title: '客户名称',
  154. dataIndex: 'name',
  155. key: 'name',
  156. }, {
  157. title: '地区',
  158. dataIndex: 'locationProvince',
  159. key: 'locationProvince',
  160. }, {
  161. title: '联系人',
  162. dataIndex: 'contacts',
  163. key: 'contacts',
  164. },
  165. {
  166. title: '联系电话',
  167. dataIndex: 'contactMobile',
  168. key: 'contactMobile',
  169. },
  170. {
  171. title: '社会性质',
  172. dataIndex: 'societyTag',
  173. key: 'societyTag',
  174. render: text => { return getSocialAttribute(text) }
  175. },
  176. {
  177. title: '客户初始时间',
  178. dataIndex: 'transferTime',
  179. key: 'transferTime',
  180. },
  181. {
  182. title: '剩余私有天数',
  183. dataIndex: 'surplusFollowTime',
  184. key: 'surplusFollowTime'
  185. },
  186. {
  187. title: '最新跟进时间',
  188. dataIndex: 'lastFollowTime',
  189. key: 'lastFollowTime',
  190. },{
  191. title: '客户等级',
  192. dataIndex: 'level',
  193. key: 'level',
  194. render:text => { return getLevel(text) }
  195. },
  196. {
  197. title: '跟进操作',
  198. dataIndex: 'abc',
  199. key: 'abc',
  200. render: (text, record, index) => {
  201. return <div>
  202. <Button onClick={(e) =>{ e.stopPropagation(), this.visit(record)}} type="primary">客户跟进</Button>
  203. </div>
  204. }
  205. }
  206. ],
  207. data: [],
  208. dataman: [],
  209. dataSource: [],
  210. visitArrList: [],
  211. searchTime: [, ]
  212. };
  213. },
  214. rankO(rank){
  215. let deletedIds;
  216. for(let idx = 0; idx < this.state.selectedRows.length; idx++) {
  217. let rowItem = this.state.selectedRows[idx];
  218. if(rowItem.id) {
  219. deletedIds = rowItem.id;
  220. };
  221. };
  222. $.ajax({
  223. method: "get",
  224. dataType: "json",
  225. crossDomain: false,
  226. url: globalConfig.context + "/api/admin/customer/updateUserLevel",
  227. data: {
  228. id: deletedIds, //客户的ID
  229. level:rank
  230. }
  231. }).done(function(data) {
  232. if(!data.error.length) {
  233. message.success('操作成功!');
  234. this.setState({
  235. loading: false,
  236. });
  237. } else {
  238. message.warning(data.error[0].message);
  239. };
  240. this.loadData(this.state.ispage);
  241. }.bind(this));
  242. },
  243. //进入新增拜访记录
  244. visit(e) {
  245. this.setState({
  246. followData:e,
  247. visitModul:true,
  248. modalVisible:false
  249. })
  250. },
  251. //列表删除功能
  252. delectRow() {
  253. let deletedIds;
  254. for(let idx = 0; idx < this.state.selectedRows.length; idx++) {
  255. let rowItem = this.state.selectedRows[idx];
  256. if(rowItem.id) {
  257. deletedIds = rowItem.id;
  258. };
  259. };
  260. this.setState({
  261. loading: true,
  262. selectedRowKeys: [],
  263. });
  264. $.ajax({
  265. method: "get",
  266. dataType: "json",
  267. crossDomain: false,
  268. url: globalConfig.context + "/api/admin/customer/deleteCustomer",
  269. data: {
  270. uid: deletedIds, //删除的ID
  271. }
  272. }).done(function(data) {
  273. if(!data.error.length) {
  274. message.success('删除成功!');
  275. this.setState({
  276. loading: false,
  277. });
  278. } else {
  279. message.warning(data.error[0].message);
  280. };
  281. this.loadData(this.state.ispage);
  282. }.bind(this));
  283. },
  284. componentWillMount() {
  285. //城市
  286. let Province = [];
  287. provinceList.map(function(item) {
  288. var id = String(item.id)
  289. Province.push(
  290. <Select.Option value={id} key={item.name}>{item.name}</Select.Option>
  291. )
  292. });
  293. //行业
  294. let intentionalArr = [];
  295. industry.map(function(item) {
  296. intentionalArr.push(
  297. <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
  298. )
  299. });
  300. //会员等级
  301. let lvlArr = [];
  302. lvl.map(function(item) {
  303. lvlArr.push(
  304. <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
  305. )
  306. });
  307. //会员状态customerStatus
  308. let currentMemberArr = [];
  309. currentMember.map(function(item) {
  310. currentMemberArr.push(
  311. <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
  312. )
  313. });
  314. this.state.Provinces = Province;
  315. this.state.intentionalOption = intentionalArr;
  316. this.state.lvlArrOption = lvlArr;
  317. this.state.currentMemberArrOption = currentMemberArr;
  318. this.loadData();
  319. this.category()
  320. },
  321. addClick() {
  322. this.state.RowData = {};
  323. this.setState({
  324. detailApi:this.props.detailApi,
  325. showDesc: true,
  326. modalVisible:false,
  327. visitModul:false
  328. });
  329. },
  330. closeDesc(e, s) {
  331. this.state.basicState=e
  332. this.state.visitModul=e;
  333. this.state.modalVisible=e;
  334. this.state.showDesc = e;
  335. if(s) {
  336. this.loadData(this.state.ispage);
  337. };
  338. },
  339. search() {
  340. this.loadData();
  341. },
  342. reset() {
  343. this.state.nameSearch = '';
  344. this.state.level = undefined;
  345. this.state.addressSearch = [];
  346. this.state.provinceSearch = undefined;
  347. this.state.citySearch = undefined;
  348. this.state.releaseDate[0] = undefined;
  349. this.state.releaseDate[1] = undefined;
  350. this.loadData();
  351. },
  352. searchSwitch() {
  353. this.setState({
  354. visitModul:false,
  355. searchMore: !this.state.searchMore
  356. });
  357. },
  358. //整行点击
  359. tableRowClick(record, index) {
  360. this.state.visitModul=false;
  361. this.state.RowData = record;
  362. this.setState({
  363. selectedRowKeys: [],
  364. modalVisible:true,
  365. basicState:true,
  366. contactState:true,
  367. })
  368. },
  369. //指定转交人自动补全
  370. supervisor(e){
  371. $.ajax({
  372. method: "get",
  373. dataType: "json",
  374. crossDomain: false,
  375. url: globalConfig.context + "/api/admin/customer/listAdminByName",
  376. data:{
  377. adminName:e
  378. },
  379. success: function (data) {
  380. let thedata=data.data;
  381. if (!thedata) {
  382. if (data.error && data.error.length) {
  383. message.warning(data.error[0].message);
  384. };
  385. thedata = {};
  386. };
  387. this.setState({
  388. customerArr:thedata,
  389. });
  390. }.bind(this),
  391. }).always(function () {
  392. this.setState({
  393. loading: false
  394. });
  395. }.bind(this));
  396. },
  397. //上级主管输入框失去焦点是判断客户是否存在
  398. selectAuto(value,options){
  399. this.setState({
  400. auto:value
  401. })
  402. },
  403. blurChange(e){
  404. let theType='';
  405. let contactLists=this.state.customerArr||[];
  406. if (e) {
  407. contactLists.map(function (item) {
  408. if (item.name == e.toString()) {
  409. theType = item.id;
  410. }
  411. });
  412. }
  413. this.setState({
  414. theTypes:theType
  415. })
  416. },
  417. //值改变时请求客户名称
  418. httpChange(e){
  419. if(e.length>=1){
  420. this.supervisor(e);
  421. }
  422. this.setState({
  423. auto:e
  424. })
  425. },
  426. //转交
  427. changeAssigner() {
  428. if(this.state.theTypes){
  429. this.setState({
  430. selectedRowKeys: [],
  431. });
  432. let changeIds,oldAid;
  433. for(let idx = 0; idx < this.state.selectedRows.length; idx++) {
  434. let rowItem = this.state.selectedRows[idx];
  435. if(rowItem.id) {
  436. oldAid=rowItem.aid;
  437. changeIds = rowItem.id;
  438. };
  439. };
  440. $.ajax({
  441. method: "get",
  442. dataType: "json",
  443. crossDomain: false,
  444. url: globalConfig.context + "/api/admin/customer/transferToOther",
  445. data: {
  446. uid: changeIds, //这一行数据的ID
  447. aid: this.state.theTypes, //指定转交人的ID
  448. oldAid:oldAid
  449. }
  450. }).done(function(data) {
  451. if(!data.error.length) {
  452. message.success('转交成功!');
  453. this.setState({
  454. auto:'',
  455. loading: false,
  456. });
  457. } else {
  458. message.warning(data.error[0].message);
  459. };
  460. this.loadData(Math.min(this.state.ispage==undefined?1:this.state.ispage,Math.ceil((this.state.pagination.total-1)/10)));
  461. }.bind(this));
  462. }else{
  463. message.warning('请输入转交人姓名')
  464. }
  465. },
  466. //导出
  467. exportExec(){
  468. let departmentName='',
  469. depart =this.state.departmentArr || [];
  470. depart.map(item=>{
  471. if(this.state.departmentId==item.id){
  472. departmentName=item.name;
  473. return;
  474. }
  475. });
  476. let data = {
  477. name:this.state.nameSearch,
  478. province:this.state.provinceSearch,
  479. city: this.state.addressSearch,
  480. level: this.state.level,
  481. startDate:this.state.releaseDate[0],
  482. endDate:this.state.releaseDate[1],
  483. }
  484. console.log(data)
  485. window.location.href=(globalConfig.context+'/api/admin/customer/privateUnitCustomerOutXls?'+$.param(data));
  486. },
  487. componentWillReceiveProps(nextProps) {
  488. if(nextProps.ApiUrl!=this.props.ApiUrl) {
  489. if(!this.state.searchMore){
  490. this.state.searchMore=true
  491. }
  492. this.state.nameSearch = '';
  493. this.state.addressSearch = [];
  494. this.state.provinceSearch = undefined;
  495. this.state.citySearch = undefined;
  496. this.state.releaseDate[0] = undefined;
  497. this.state.releaseDate[1] = undefined;
  498. this.loadData(null,nextProps.ApiUrl);
  499. };
  500. },
  501. render() {
  502. const FormItem = Form.Item;
  503. const rowSelection = {
  504. selectedRowKeys: this.state.selectedRowKeys,
  505. onChange: (selectedRowKeys, selectedRows) => {
  506. this.setState({
  507. modalVisible:false,
  508. selectedRows: selectedRows.slice(-1),
  509. selectedRowKeys: selectedRowKeys.slice(-1)
  510. });
  511. },
  512. onSelect: (recordt, selected, selectedRows) => {
  513. this.setState({
  514. modalVisible:false,
  515. recordt: recordt.id
  516. })
  517. },
  518. };
  519. const hasSelected = this.state.selectedRowKeys.length > 0;
  520. const { RangePicker } = DatePicker;
  521. const dataSources=this.state.customerArr || [];
  522. const options = dataSources.map((group) =>
  523. <Select.Option key={group.id} value={group.name}>{group.name}</Select.Option>
  524. )
  525. const intentionState = this.props.intentionState ||'';
  526. return (
  527. <div className="user-content">
  528. <ShowModalDiv ShowModal={this.state.showModal} />
  529. <div className="content-title">
  530. <span>{!intentionState ? "私有单位客户" : "私有专家客户"}</span>
  531. </div>
  532. <div className="user-search">
  533. <Tabs
  534. defaultActiveKey="1"
  535. onChange={this.callback}
  536. className="test">
  537. <TabPane tab="搜索" key="1">
  538. <Input
  539. placeholder="客户名称"
  540. value={this.state.nameSearch}
  541. style={{width:150,marginRight:10,marginLeft:10}}
  542. onChange={e => {
  543. this.setState({ nameSearch: e.target.value });
  544. }}
  545. />
  546. <Select
  547. placeholder="省"
  548. style={{ width: 80 }}
  549. value={this.state.provinceSearch}
  550. onChange={e => {
  551. this.setState({ provinceSearch: e });
  552. }}
  553. >
  554. {this.state.Provinces}
  555. </Select>
  556. <span style={{ marginRight: "10px" }}>
  557. <Cascader
  558. options={citySelect()}
  559. value={this.state.addressSearch}
  560. placeholder="选择城市"
  561. onChange={(e, pre) => {
  562. this.setState({ addressSearch: e });
  563. }}
  564. />
  565. </span>
  566. <Select
  567. style={{ width: 120 }}
  568. value={this.state.level}
  569. onChange={e => {
  570. this.setState({ level: e });
  571. }}
  572. placeholder="请选择客户等级"
  573. >
  574. <Select.Option value="0">一般客户</Select.Option>
  575. <Select.Option value="1">意向客户</Select.Option>
  576. <Select.Option value="2">重点客户</Select.Option>
  577. </Select>
  578. <RangePicker
  579. value={[
  580. this.state.releaseDate[0]
  581. ? moment(this.state.releaseDate[0])
  582. : null,
  583. this.state.releaseDate[1]
  584. ? moment(this.state.releaseDate[1])
  585. : null
  586. ]}
  587. onChange={(data, dataString) => {
  588. this.setState({ releaseDate: dataString });
  589. }}
  590. />
  591. <Button
  592. type="primary"
  593. style={{ marginLeft: "10px",marginRight: 10 }}
  594. onClick={this.search}
  595. >
  596. 搜索
  597. </Button>
  598. <Button onClick={this.reset}>重置</Button>
  599. </TabPane>
  600. {/*<Button onClick={() => { window.open(globalConfig.context + '/api/admin/customer/downloadTemplate?type=1') }}>下载批量导入模板</Button>
  601. <Upload
  602. name="file"
  603. action={globalConfig.context + "/api/admin/customer/uploadExcel"}
  604. beforeUpload={beforeUploadFile}
  605. showUploadList={false}
  606. onChange={(info) => {
  607. if (info.file.status !== 'uploading') {
  608. console.log(info.file, info.fileList);
  609. }
  610. if (info.file.status === 'done') {
  611. if (!info.file.response.error.length) {
  612. message.success(`${info.file.name} 文件上传成功!`);
  613. this.loadData();
  614. } else {
  615. message.warning(info.file.response.error[0].message);
  616. return;
  617. };
  618. } else if (info.file.status === 'error') {
  619. message.error(`${info.file.name} 文件上传失败。`);
  620. };
  621. }} >
  622. <Button>上传批量内容</Button>
  623. </Upload>
  624. {adminData.isSuperAdmin?<Popconfirm title="是否删除?" onConfirm={this.delectRow} okText="是" cancelText="否">
  625. <Button type="danger" style={{marginLeft:'10px'}}
  626. disabled={!hasSelected}
  627. >删除<Icon type="minus" />
  628. </Button>
  629. </Popconfirm>:''
  630. }*/}
  631. <TabPane tab="转交" key="2">
  632. <AutoComplete
  633. className="certain-category-search"
  634. dropdownClassName="certain-category-search-dropdown"
  635. dropdownMatchSelectWidth={false}
  636. dropdownStyle={{ width: 120 }}
  637. style={{ width: "120px" }}
  638. dataSource={options}
  639. placeholder="输入转交人姓名"
  640. value={this.state.auto}
  641. onChange={this.httpChange}
  642. filterOption={true}
  643. onBlur={this.blurChange}
  644. onSelect={this.selectAuto}
  645. disabled={!hasSelected}
  646. >
  647. <Input />
  648. </AutoComplete>
  649. <Button
  650. type="primary"
  651. onClick={this.changeAssigner}
  652. disabled={!hasSelected}
  653. >
  654. 转交
  655. </Button>
  656. </TabPane>
  657. <TabPane tab="新增" key="3">
  658. <Button type="primary" style={{float:"left",marginTop: 10,marginLeft: 10}} className="addButton" onClick={this.addClick}>
  659. 新增客户
  660. <Icon type="plus" />
  661. </Button>
  662. {/*<Button type="default" className="addButton" onClick={this.exportExec}>导出excel<Icon type="plus" /></Button>*/}
  663. </TabPane>
  664. <TabPane key="4" tab="客户类型">
  665. <div className="clearfix" style={{ marginTop: "5px" }}>
  666. <Button
  667. onClick={e => {
  668. e.stopPropagation(), this.rankO(0);
  669. }}
  670. type="primary"
  671. style={{ marginRight: "10px" }}
  672. disabled={!hasSelected}
  673. >
  674. 一般客户
  675. </Button>
  676. <Button
  677. onClick={e => {
  678. e.stopPropagation(), this.rankO(1);
  679. }}
  680. type="primary"
  681. style={{ marginRight: "10px" }}
  682. disabled={!hasSelected}
  683. >
  684. 意向客户
  685. </Button>
  686. <Button
  687. onClick={e => {
  688. e.stopPropagation(), this.rankO(2);
  689. }}
  690. type="primary"
  691. disabled={!hasSelected}
  692. >
  693. 重点客户
  694. </Button>
  695. </div>
  696. </TabPane>
  697. </Tabs>
  698. </div>
  699. <div className="patent-table">
  700. <Spin spinning={this.state.loading}>
  701. <Table
  702. columns={this.state.columns}
  703. dataSource={this.state.dataSource}
  704. rowSelection={rowSelection}
  705. pagination={this.state.pagination}
  706. onRowClick={this.tableRowClick}
  707. />
  708. </Spin>
  709. </div>
  710. <AddIntention
  711. api={this.state.detailApi}
  712. showDesc={this.state.showDesc}
  713. closeDesc={this.closeDesc}
  714. />
  715. <FollowDetail
  716. categoryArr={this.state.categoryArr}
  717. followData={this.state.followData}
  718. visitModul={this.state.visitModul}
  719. closeDesc={this.closeDesc}
  720. />
  721. <IntentionDetail
  722. categoryArr={this.state.categoryArr}
  723. detailApi={this.props.detailApi}
  724. IntentionData={this.state.RowData}
  725. modalVisible={this.state.modalVisible}
  726. closeDesc={this.closeDesc}
  727. basicState={this.state.basicState}
  728. contactState={this.state.contactState}
  729. />
  730. </div>
  731. );
  732. }
  733. }));
  734. export default IntentionCustomer;