crmAll.jsx 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251
  1. import React from 'react';
  2. import { Radio, Icon, Button, AutoComplete,Cascader,Input, Select, Spin, Popconfirm, Table, Switch, message, DatePicker, Upload, Form ,Modal,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 TechAchievementDesc from '@/manageCenter/achievement/crmAchievement.jsx';
  7. import { citySelect, provinceList ,areaSelect} from '@/NewDicProvinceList';
  8. import { socialAttribute, industry, auditStatusL, lvl, currentMember ,slcRedit,dataGrade} from '@/dataDic.js';
  9. import { getSocialAttribute, beforeUploadFile,splitUrl ,getSlcRedit,getDataGrade,getAchievementCategory,getTechAuditStatus,getboutique,getXiangmoState} from '@/tools.js';
  10. import './customer.less';
  11. const TabPane = Tabs.TabPane;
  12. //图片组件
  13. const PicturesWall = React.createClass({
  14. getInitialState() {
  15. return {
  16. previewVisible: false,
  17. previewImage: '',
  18. fileList: [],
  19. }
  20. },
  21. handleCancel() {
  22. this.setState({
  23. previewVisible: false
  24. })
  25. },
  26. handlePreview(file) {
  27. this.setState({
  28. previewImage: file.url || file.thumbUrl,
  29. previewVisible: true,
  30. });
  31. },
  32. handleChange(info) {
  33. let fileList = info.fileList;
  34. this.setState({
  35. fileList
  36. });
  37. this.props.fileList(fileList);
  38. },
  39. componentWillReceiveProps(nextProps) {
  40. this.state.fileList = nextProps.pictureUrl;
  41. },
  42. render() {
  43. const {
  44. previewVisible,
  45. previewImage,
  46. fileList
  47. } = this.state;
  48. const uploadButton = (
  49. <div>
  50. <Icon type="plus" />
  51. <div className="ant-upload-text">点击上传</div>
  52. </div>
  53. );
  54. return(
  55. <div style={{display:"inline-block"}}>
  56. <Upload
  57. action={globalConfig.context + "/api/admin/customer/uploadCustomerImg"}
  58. data={{ 'sign': '' }}
  59. listType="picture-card"
  60. fileList={fileList}
  61. onPreview={this.handlePreview}
  62. onChange={this.handleChange} >
  63. {fileList.length >= 1 ? null : uploadButton}
  64. </Upload>
  65. <Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}>
  66. <img alt="example" style={{ width: '100%' }} src={previewImage} />
  67. </Modal>
  68. </div>
  69. );
  70. }
  71. });
  72. const IntentionCustomer = Form.create()(React.createClass({
  73. loadData(pageNo, apiUrl) {
  74. this.setState({
  75. visitModul:false,
  76. loading: true,
  77. ispage:pageNo,
  78. modalVisible:false
  79. });
  80. $.ajax({
  81. method: "post",
  82. dataType: "json",
  83. crossDomain: false,
  84. url: globalConfig.context +"/api/admin/customer/listDepCustomerInformation",
  85. data: {
  86. pageNo: pageNo || 1,
  87. pageSize: this.state.pagination.pageSize,
  88. name: this.state.nameSearch,
  89. dataGrade: this.state.dataGrade,
  90. province: !(this.state.addressSearch).length ? this.state.provinceSearch : this.state.addressSearch[0],
  91. city: !(this.state.addressSearch).length ? '' : this.state.addressSearch[1],
  92. startDate: this.state.releaseDate[0],
  93. endDate: this.state.releaseDate[1],
  94. },
  95. success: function(data) {
  96. let theArr = [];
  97. if(data.error.length || data.data.list == "") {
  98. if(data.error && data.error.length) {
  99. message.warning(data.error[0].message);
  100. };
  101. } else {
  102. for(let i = 0; i < data.data.list.length; i++) {
  103. let thisdata = data.data.list[i];
  104. let diqu=(thisdata.province==null?"":thisdata.province)+(thisdata.city==null?"":"-"+thisdata.city)+(thisdata.area==null?"":"-"+thisdata.area);
  105. theArr.push({
  106. key: i,
  107. id: thisdata.id,//用户ID
  108. type:thisdata.type,//类型
  109. name: thisdata.name,//用户名称
  110. diqu: diqu,//省市区
  111. industry: thisdata.industry,//行业
  112. contacts: thisdata.contacts,//联系人
  113. contactMobile: thisdata.contactMobile,//联系人电话
  114. createTime: thisdata.createTime,//行业
  115. });
  116. };
  117. this.state.pagination.current = data.data.pageNo;
  118. this.state.pagination.total = data.data.totalCount;
  119. };
  120. if(data.data&&data.data.list&&!data.data.list.length){
  121. this.state.pagination.current=0
  122. this.state.pagination.total=0
  123. }
  124. this.setState({
  125. dataSource: theArr,
  126. pagination: this.state.pagination,
  127. selectedRowKeys:[]
  128. });
  129. }.bind(this),
  130. }).always(function() {
  131. this.setState({
  132. loading: false
  133. });
  134. }.bind(this));
  135. },
  136. loadDatas(pageNo) {
  137. this.setState({
  138. loading: true,
  139. });
  140. $.ajax({
  141. method: "get",
  142. dataType: "json",
  143. crossDomain: false,
  144. url: globalConfig.context + "/api/admin/achievement/listUserAchievement",
  145. data: {
  146. pageNo: pageNo || 1,
  147. pageSize: this.state.paginationDate.pageSize,
  148. uid:this.state.uid,
  149. },
  150. success: function (data) {
  151. let theArr = [];
  152. if (!data.data || !data.data.list) {
  153. if (data.error && data.error.length) {
  154. message.warning(data.error[0].message);
  155. };
  156. } else {
  157. for (let i = 0; i < data.data.list.length; i++) {
  158. let thisdata = data.data.list[i];
  159. theArr.push({
  160. key: i,
  161. id: thisdata.id,
  162. serialNumber: thisdata.serialNumber,
  163. dataCategory: thisdata.dataCategory,
  164. name: thisdata.name,
  165. keyword: thisdata.keyword,
  166. theName: thisdata.username || thisdata.ownerName,
  167. category: thisdata.category,
  168. ownerName: thisdata.username ? thisdata.username : thisdata.ownerName,
  169. ownerType: thisdata.ownerType,
  170. ownerMobile: thisdata.ownerMobile,
  171. status: thisdata.status,
  172. releaseDate: thisdata.releaseDate,
  173. releaseDateFormattedDate: thisdata.releaseDateFormattedDate,
  174. auditStatus: thisdata.auditStatus,
  175. boutique: thisdata.boutique,
  176. hot: thisdata.hot,
  177. techBrokerId:thisdata.techBrokerId,
  178. createTimeFormattedDate: thisdata.createTimeFormattedDate,
  179. remark:thisdata.remark
  180. });
  181. };
  182. this.state.paginationDate.current = data.data.pageNo;
  183. this.state.paginationDate.total = data.data.totalCount;
  184. };
  185. this.setState({
  186. dataSourceDate: theArr,
  187. paginationDate: this.state.paginationDate
  188. });
  189. }.bind(this),
  190. }).always(function () {
  191. this.setState({
  192. loading: false
  193. });
  194. }.bind(this));
  195. },
  196. loadDatac(pageNo, apiUrl) {
  197. this.setState({
  198. loading: true,
  199. });
  200. $.ajax({
  201. method: "get",
  202. dataType: "json",
  203. crossDomain: false,
  204. url: globalConfig.context +"/api/admin/customers/selectListOrgAnnual",
  205. data: {
  206. // pageNo: pageNo || 1,
  207. // pageSize: this.state.pagination.pageSize,
  208. uid:this.state.uid,
  209. },
  210. success: function(data) {
  211. let theArr = [];
  212. if(data.error.length || data.data.list == "") {
  213. if(data.error && data.error.length) {
  214. message.warning(data.error[0].message);
  215. };
  216. } else {
  217. for(let i = 0; i < data.data.list.length; i++) {
  218. let thisdata = data.data.list[i];
  219. let diqu=(thisdata.province==null?"":thisdata.province)+(thisdata.city==null?"":"-"+thisdata.city)+(thisdata.area==null?"":"-"+thisdata.area);
  220. theArr.push({
  221. key: i,
  222. id: thisdata.id,//年报ID
  223. year:thisdata.year,//年份
  224. salesAmount: thisdata.salesAmount,//营销额
  225. fixedAssets:thisdata.fixedAssets,//固定资产
  226. researchAmount: thisdata.researchAmount,//研发费用
  227. assets: thisdata.assets,//总资产
  228. aid: thisdata.aid,//录入人
  229. });
  230. };
  231. // this.state.pagination.current = data.data.pageNo;
  232. // this.state.pagination.total = data.data.totalCount;
  233. };
  234. if(data.data&&data.data.list&&!data.data.list.length){
  235. this.state.pagination.current=0
  236. this.state.pagination.total=0
  237. }
  238. this.setState({
  239. dataSourcec: theArr,
  240. // pageNo: pageNo,
  241. // pagination: this.state.pagination,
  242. // selectedRowKeys:[]
  243. });
  244. }.bind(this),
  245. }).always(function() {
  246. this.setState({
  247. loading: false
  248. });
  249. }.bind(this));
  250. },
  251. loadDatax(pageNo, apiUrl) {
  252. this.setState({
  253. loading: true,
  254. });
  255. $.ajax({
  256. method: "get",
  257. dataType: "json",
  258. crossDomain: false,
  259. url: globalConfig.context +"/api/admin/customers/selectListOrgYearProject",
  260. data: {
  261. uid:this.state.uid,
  262. },
  263. success: function(data) {
  264. let theArr = [];
  265. if(data.error.length || data.data.list == "") {
  266. if(data.error && data.error.length) {
  267. message.warning(data.error[0].message);
  268. };
  269. } else {
  270. for(let i = 0; i < data.data.list.length; i++) {
  271. let thisdata = data.data.list[i];
  272. let diqu=(thisdata.province==null?"":thisdata.province)+(thisdata.city==null?"":"-"+thisdata.city)+(thisdata.area==null?"":"-"+thisdata.area);
  273. theArr.push({
  274. key: i,
  275. id: thisdata.id,//用户ID
  276. projectName:thisdata.projectName,//项目名称
  277. year: thisdata.year,//年份
  278. status: thisdata.status?thisdata.status.toString():"",//项目状态
  279. remark: thisdata.remark,//备注
  280. aid: thisdata.aid,//录入人
  281. });
  282. };
  283. // this.state.pagination.current = data.data.pageNo;
  284. // this.state.pagination.total = data.data.totalCount;
  285. };
  286. if(data.data&&data.data.list&&!data.data.list.length){
  287. this.state.pagination.current=0
  288. this.state.pagination.total=0
  289. }
  290. this.setState({
  291. dataSourcex: theArr,
  292. });
  293. }.bind(this),
  294. }).always(function() {
  295. this.setState({
  296. loading: false
  297. });
  298. }.bind(this));
  299. },
  300. getInitialState() {
  301. return {
  302. addressSearch: [],
  303. orgCodeUrl: [],
  304. companyLogoUrl: [],
  305. visible: false,
  306. releaseDate: [],
  307. visitModul:false,
  308. detailApi:'',
  309. followData:{},
  310. selectedRowKeys: [],
  311. selectedRows: [],
  312. loading: false,
  313. callnub:"0",
  314. modalVisible:false,
  315. pagination: {
  316. defaultCurrent: 1,
  317. defaultPageSize: 10,
  318. showQuickJumper: true,
  319. pageSize: 10,
  320. onChange: function(page) {
  321. this.loadData(page);
  322. }.bind(this),
  323. showTotal: function(total) {
  324. return '共' + total + '条数据';
  325. }
  326. },
  327. paginationDate: {
  328. defaultCurrent: 1,
  329. defaultPageSize: 10,
  330. showQuickJumper: true,
  331. pageSize: 10,
  332. onChange: function(page) {
  333. this.loadDatas(page);
  334. }.bind(this),
  335. showTotal: function(total) {
  336. return '共' + total + '条数据';
  337. }
  338. },
  339. columns: [{
  340. title: '客户名称',
  341. dataIndex: 'name',
  342. key: 'name',
  343. }, {
  344. title: '地区',
  345. dataIndex: 'diqu',
  346. key: 'diqu',
  347. }, {
  348. title: '联系人',
  349. dataIndex: 'contacts',
  350. key: 'contacts',
  351. },
  352. {
  353. title: '行业',
  354. dataIndex: 'industry',
  355. key: 'industry'
  356. },
  357. {
  358. title: '联系电话',
  359. dataIndex: 'contactMobile',
  360. key: 'contactMobile',
  361. },
  362. {
  363. title: '创建时间',
  364. dataIndex: 'createTime',
  365. key: 'createTime',
  366. }
  367. ],
  368. data: [],
  369. dataSource: [],
  370. columnsDate: [
  371. {
  372. title: '编号',
  373. dataIndex: 'serialNumber',
  374. key: 'serialNumber',
  375. }, {
  376. title: '名称',
  377. dataIndex: 'name',
  378. key: 'name',
  379. }, {
  380. title: '关键字',
  381. dataIndex: 'keyword',
  382. key: 'keyword',
  383. }, {
  384. title: '类型',
  385. dataIndex: 'category',
  386. key: 'category',
  387. render: text => { return getAchievementCategory(text); }
  388. },{
  389. title: '审核状态',
  390. dataIndex: 'auditStatus',
  391. key: 'auditStatus',
  392. render: text => { return getTechAuditStatus(text) }
  393. },
  394. {
  395. title: '是否精品',
  396. dataIndex: 'boutique',
  397. key: 'boutique',
  398. render: text => { return getboutique(text) }
  399. },
  400. {
  401. title: '发布时间',
  402. dataIndex: 'releaseDateFormattedDate',
  403. key: 'releaseDateFormattedDate',
  404. },{
  405. title: '录入时间',
  406. dataIndex: 'createTimeFormattedDate',
  407. key: 'createTimeFormattedDate',
  408. },
  409. ],
  410. dataSourceDate: [],
  411. columnsc: [{
  412. title: '年份',
  413. dataIndex: 'year',
  414. key: 'year',
  415. }, {
  416. title: '营销收入(万)',
  417. dataIndex: 'salesAmount',
  418. key: 'salesAmount',
  419. },
  420. {
  421. title: '总资产(万)',
  422. dataIndex: 'assets',
  423. key: 'assets'
  424. },
  425. {
  426. title: '固定资产(万)',
  427. dataIndex: 'fixedAssets',
  428. key: 'fixedAssets'
  429. }, {
  430. title: '研发费用(万)',
  431. dataIndex: 'researchAmount',
  432. key: 'researchAmount',
  433. }
  434. ],
  435. dataSourcec: [],
  436. columnsx: [{
  437. title: '项目名称',
  438. dataIndex: 'projectName',
  439. key: 'projectName',
  440. },{
  441. title: '年份',
  442. dataIndex: 'year',
  443. key: 'year',
  444. },
  445. {
  446. title: '项目状态',
  447. dataIndex: 'status',
  448. key: 'status',
  449. render: text => { return getXiangmoState(text); }
  450. }, {
  451. title: '备注',
  452. dataIndex: 'remark',
  453. key: 'remark',
  454. }
  455. ],
  456. dataSourcex: [],
  457. };
  458. },
  459. componentWillMount() {
  460. //城市
  461. let Province = [];
  462. provinceList.map(function(item) {
  463. var id = String(item.id)
  464. Province.push(
  465. <Select.Option value={id} key={item.name}>{item.name}</Select.Option>
  466. )
  467. });
  468. //行业
  469. let intentionalArr = [];
  470. industry.map(function(item) {
  471. intentionalArr.push(
  472. <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
  473. )
  474. });
  475. //会员等级
  476. let lvlArr = [];
  477. lvl.map(function(item) {
  478. lvlArr.push(
  479. <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
  480. )
  481. });
  482. //会员状态customerStatus
  483. let currentMemberArr = [];
  484. currentMember.map(function(item) {
  485. currentMemberArr.push(
  486. <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
  487. )
  488. });
  489. this.state.Provinces = Province;
  490. this.state.intentionalOption = intentionalArr;
  491. this.state.lvlArrOption = lvlArr;
  492. this.state.currentMemberArrOption = currentMemberArr;
  493. this.loadData();
  494. },
  495. search() {
  496. this.loadData();
  497. },
  498. reset() {
  499. this.state.nameSearch = '';
  500. this.state.addressSearch = [];
  501. this.state.dataGrade=undefined;
  502. this.state.follow=undefined;
  503. this.state.provinceSearch = undefined;
  504. this.state.citySearch = undefined;
  505. this.state.releaseDate[0] = undefined;
  506. this.state.releaseDate[1] = undefined;
  507. this.loadData();
  508. },
  509. //列表详情
  510. details(id) {
  511. $.ajax({
  512. method: "get",
  513. dataType: "json",
  514. crossDomain: false,
  515. url: globalConfig.context +"/api/admin/customer/findOrganizationCustomerDetail",
  516. data: {
  517. uid:id
  518. },
  519. success: function(data) {
  520. let thisDetail= data.data;
  521. if(data.error.length || data.data.list == "") {
  522. if(data.error && data.error.length) {
  523. message.warning(data.error[0].message);
  524. };
  525. } else {
  526. let ProvinceCityArr = [];
  527. let ProvinceS = thisDetail.locationProvince; //省
  528. let citys = thisDetail.locationCity;//市
  529. let Areas = thisDetail.locationArea;//区
  530. ProvinceCityArr.push(ProvinceS, citys, Areas);
  531. this.setState({
  532. detailId:thisDetail.id,//详情ID
  533. identifyName:thisDetail.identifyName,//客户名称
  534. uid:thisDetail.uid,//客户ID
  535. societyTag:thisDetail.societyTag,//社会标签
  536. companyLogoUrl:thisDetail.companyLogoUrl? splitUrl(thisDetail.companyLogoUrl, ',', globalConfig.avatarHost + '/upload') : [],//公司LOGO
  537. introduction:thisDetail.introduction,//介绍
  538. industry:thisDetail.industry?thisDetail.industry.toString():"",//行业
  539. locationProvince:thisDetail.locationProvince,//省
  540. locationCity:thisDetail.locationCity,//市
  541. locationArea:thisDetail.locationArea,//区
  542. ProvinceCity: ProvinceCityArr[0]!=null?ProvinceCityArr:undefined,//省市区
  543. postalAddress:thisDetail.postalAddress,//通讯地址
  544. contactsFixedTel:thisDetail.contactsFixedTel,//固定电话
  545. contactsFax:thisDetail.contactsFax,//传真地址
  546. registeredCapital:thisDetail.registeredCapital,//注册资金
  547. enterpriseScale:thisDetail.enterpriseScale,//企业规模
  548. legalPerson:thisDetail.legalPerson,//法人
  549. legalPersonIdCard:thisDetail.legalPersonIdCard,//法人身份证
  550. legalPersonTel:thisDetail.legalPersonTel,//法人联系电话
  551. legalPersonEmail:thisDetail.legalPersonEmail,//法人联系邮箱
  552. highTechZone:thisDetail.highTechZone,//是否高新
  553. listed:thisDetail.listed,//是否高新
  554. international:thisDetail.international,//是否国际化
  555. orgCode:thisDetail.orgCode,//社会统一机构
  556. orgCodeUrl:thisDetail.orgCodeUrl? splitUrl(thisDetail.orgCodeUrl, ',', globalConfig.avatarHost + '/upload') : [],//社会统一机构地址
  557. businessScope:thisDetail.businessScope,//业务范围
  558. contacts:thisDetail.contacts,//主要联系人姓名
  559. contactMobile:thisDetail.contactMobile,//主要联系人电话
  560. investment:thisDetail.investment,//投资机构
  561. businessAudit:thisDetail.businessAudit,//业务认证
  562. auditStatus:thisDetail.auditStatus,//实名认证
  563. intellectualProperty:thisDetail.intellectualProperty,//已有知识产权情况
  564. yearSalesAmount:thisDetail.yearSalesAmount,//年度销售额
  565. lastYearResearchAmount:thisDetail.lastYearResearchAmount,//上年度研发费用
  566. assets:thisDetail.assets,//总资产
  567. qualification:thisDetail.qualification,//企业资质情况
  568. cooperationSituation:thisDetail.cooperationSituation,//企业与高校院所
  569. informationMaintainer:thisDetail.informationMaintainer,//资料维护人
  570. informationMaintainerName:thisDetail.informationMaintainerName,//资料维护人
  571. coreTechnology:thisDetail.coreTechnology,//核心技术
  572. accomplishSituation:thisDetail.accomplishSituation,//客户已完成项目情况
  573. creditRating:thisDetail.creditRating?thisDetail.creditRating.toString():"",//信用等级
  574. });
  575. }}.bind(this),
  576. }).always(function() {
  577. this.setState({
  578. loading: false
  579. });
  580. }.bind(this));
  581. },
  582. //基本信息提交
  583. newSubmit(e) {
  584. e.preventDefault();
  585. if(!this.state.industry) {
  586. message.warning('请选择行业');
  587. return false;
  588. };
  589. if(!this.state.societyTag) {
  590. message.warning('请选择社会属性');
  591. return false;
  592. };
  593. if(!this.state.ProvinceCity[1]) {
  594. message.warning('请选择地区');
  595. return false;
  596. };
  597. if(!this.state.registeredCapital) {
  598. message.warning('请填写注册资本');
  599. return false;
  600. };
  601. if(!this.state.businessScope) {
  602. message.warning('请填写公司主营产品');
  603. return false;
  604. };
  605. if(!this.state.intellectualProperty) {
  606. message.warning('请填写已有知识产权情况');
  607. return false;
  608. };
  609. var reg = /^[1-9]\d*$|^0$/;
  610. if(this.state.consultationPrice) {
  611. if(this.state.consultationPrice.length > 6) {
  612. message.warning('咨询费用不超过6位数');
  613. this.refs.consul.focus();
  614. return false;
  615. };
  616. if(!reg.test(this.state.consultationPrice)) {
  617. message.warning('咨询费用只能输入数字');
  618. this.refs.consul.focus();
  619. return false;
  620. }
  621. }
  622. this.state.data = [];
  623. this.setState({
  624. selectedRowKeys: [],
  625. });
  626. let theorgCodeUrl = [];
  627. if(this.state.orgCodeUrl.length) {
  628. let picArr = [];
  629. this.state.orgCodeUrl.map(function(item) {
  630. if(item.response && item.response.data && item.response.data.length) {
  631. picArr.push(item.response.data);
  632. }
  633. });
  634. theorgCodeUrl = picArr.join(",");
  635. };
  636. let thecompanyLogoUrl = [];
  637. if(this.state.companyLogoUrl.length) {
  638. let picArr = [];
  639. this.state.companyLogoUrl.map(function(item) {
  640. if(item.response && item.response.data && item.response.data.length) {
  641. picArr.push(item.response.data);
  642. }
  643. });
  644. thecompanyLogoUrl = picArr.join(",");
  645. };
  646. let years = [];
  647. let yearMonth = this.state.yearMonth != undefined ? new Date(this.state.yearMonth).toLocaleDateString() : '';
  648. years = yearMonth.split('/');
  649. this.setState({
  650. loading: true
  651. });
  652. $.ajax({
  653. method: "post",
  654. dataType: "json",
  655. url: globalConfig.context + '/api/admin/customer/updateOrganizationCustomer',
  656. data: {
  657. id:this.state.detailId,//详情ID
  658. identifyName:this.state.identifyName,//客户名称
  659. uid:this.state.uid,//客户ID
  660. societyTag:this.state.societyTag,//社会标签
  661. companyLogoUrl:thecompanyLogoUrl.length != 0 ? thecompanyLogoUrl : '',//公司LOGO
  662. introduction:this.state.introduction,//介绍
  663. industry:this.state.industry,//行业
  664. locationProvince:(this.state.ProvinceCity)[0],//省
  665. locationCity:(this.state.ProvinceCity)[1],//市
  666. locationArea:(this.state.ProvinceCity)[2],//区
  667. postalAddress:this.state.postalAddress,//通讯地址
  668. contactsFixedTel:this.state.contactsFixedTel,//固定电话
  669. contactsFax:this.state.contactsFax,//传真地址
  670. registeredCapital:this.state.registeredCapital,//注册资金
  671. enterpriseScale:this.state.enterpriseScale,//企业规模
  672. legalPerson:this.state.legalPerson,//法人
  673. legalPersonIdCard:this.state.legalPersonIdCard,//法人身份证
  674. legalPersonTel:this.state.legalPersonTel,//法人联系电话
  675. legalPersonEmail:this.state.legalPersonEmail,//法人联系邮箱
  676. highTechZone:this.state.highTechZone,//是否高新
  677. listed:this.state.listed,//是否高新
  678. international:this.state.international,//是否国际化
  679. orgCode:this.state.orgCode,//社会统一机构
  680. orgCodeUrl: theorgCodeUrl.length != 0 ? theorgCodeUrl : '',//社会统一机构地址
  681. businessScope:this.state.businessScope,//业务范围
  682. contacts:this.state.contacts,//主要联系人姓名
  683. contactMobile:this.state.contactMobile,//主要联系人电话
  684. investment:this.state.investment,//投资机构
  685. businessAudit:this.state.businessAudit,//业务认证
  686. auditStatus:this.state.auditStatus,//实名认证
  687. intellectualProperty:this.state.intellectualProperty,//已有知识产权情况
  688. yearSalesAmount:this.state.yearSalesAmount,//年度销售额
  689. lastYearResearchAmount:this.state.lastYearResearchAmount,//上年度研发费用
  690. assets:this.state.assets,//总资产
  691. qualification:this.state.qualification,//企业资质情况
  692. cooperationSituation:this.state.cooperationSituation,//企业与高校院所
  693. informationMaintainer:this.state.informationMaintainer,//资料维护人
  694. informationMaintainerName:this.state.informationMaintainerName,//资料维护人
  695. coreTechnology:this.state.coreTechnology,//核心技术
  696. accomplishSituation:this.state.accomplishSituation,//客户已完成项目情况
  697. creditRating:this.state.creditRating,//信用等级
  698. }
  699. }).done(function(data) {
  700. this.setState({
  701. loading: false
  702. });
  703. if(!data.error.length) {
  704. message.success('保存成功!');
  705. this.visitCancel();
  706. this.loadData();
  707. } else {
  708. message.warning(data.error[0].message);
  709. }
  710. }.bind(this));
  711. },
  712. //整行点击
  713. tableRowClick(record, index) {
  714. this.state.visitModul=true;
  715. this.details(record.id);
  716. },
  717. //指定转交人自动补全
  718. supervisor(e){
  719. $.ajax({
  720. method: "get",
  721. dataType: "json",
  722. crossDomain: false,
  723. url: globalConfig.context + "/api/admin/customer/listAdminByName",
  724. data:{
  725. adminName:e
  726. },
  727. success: function (data) {
  728. let thedata=data.data;
  729. if (!thedata) {
  730. if (data.error && data.error.length) {
  731. message.warning(data.error[0].message);
  732. };
  733. thedata = {};
  734. };
  735. this.setState({
  736. customerArr:thedata,
  737. });
  738. }.bind(this),
  739. }).always(function () {
  740. this.setState({
  741. loading: false
  742. });
  743. }.bind(this));
  744. },
  745. //输入转交人输入框失去焦点是判断客户是否存在
  746. selectAuto(value,options){
  747. this.setState({
  748. auto:value
  749. })
  750. },
  751. blurChange(e){
  752. let theType='';
  753. let contactLists=this.state.customerArr||[];
  754. if (e) {
  755. contactLists.map(function (item) {
  756. if (item.name == e.toString()) {
  757. theType = item.id;
  758. }
  759. });
  760. }
  761. this.setState({
  762. theTypes:theType
  763. })
  764. },
  765. //值改变时请求客户名称
  766. httpChange(e){
  767. if(e.length>=1){
  768. this.supervisor(e);
  769. }
  770. this.setState({
  771. auto:e
  772. })
  773. },
  774. //转交
  775. changeAssigner() {
  776. if(this.state.theTypes){
  777. this.setState({
  778. selectedRowKeys: [],
  779. });
  780. let id;
  781. for(let idx = 0; idx < this.state.selectedRows.length; idx++) {
  782. let rowItem = this.state.selectedRows[idx];
  783. if(rowItem.id) {
  784. id=rowItem.id;
  785. };
  786. };
  787. $.ajax({
  788. method: "post",
  789. dataType: "json",
  790. crossDomain: false,
  791. url: globalConfig.context + "/api/admin/customer/updateInformationMaintainerr",
  792. data: {
  793. id: id, //客户ID
  794. aid: this.state.theTypes, //指定转交人的ID
  795. }
  796. }).done(function(data) {
  797. if(!data.error.length) {
  798. message.success('转交成功!');
  799. this.setState({
  800. auto:'',
  801. loading: false,
  802. });
  803. } else {
  804. message.warning(data.error[0].message);
  805. };
  806. this.loadData(this.state.ispage);
  807. }.bind(this));
  808. }else{
  809. message.warning('请输入转交人姓名')
  810. }
  811. },
  812. //详情打开
  813. visitOk(e) {
  814. this.setState({
  815. visitModul: false
  816. });
  817. },
  818. //详情关闭
  819. visitCancel(e) {
  820. this.setState({
  821. visitModul: false,
  822. callnub:"0"
  823. });
  824. },
  825. getOrgCodeUrl(e) {
  826. this.setState({ orgCodeUrl: e });
  827. },
  828. getCompanyLogoUrl(e) {
  829. this.setState({ companyLogoUrl: e });
  830. },
  831. componentWillReceiveProps(nextProps) {
  832. if(nextProps.ApiUrl!=this.props.ApiUrl) {
  833. this.state.nameSearch = '';
  834. this.state.addressSearch = [];
  835. this.state.provinceSearch = undefined;
  836. this.state.citySearch = undefined;
  837. this.state.releaseDate[0] = undefined;
  838. this.state.releaseDate[1] = undefined;
  839. this.loadData(null,nextProps.ApiUrl);
  840. };
  841. },
  842. callback(e) {
  843. if(e == '0') {
  844. this.setState({
  845. callnub: e,
  846. })
  847. }
  848. if(e == '1') {
  849. this.setState({
  850. callnub: e,
  851. })
  852. this.loadDatas();
  853. }
  854. if(e == '2') {
  855. this.setState({
  856. callnub: e,
  857. })
  858. this.loadDatac();
  859. }
  860. if(e == '3') {
  861. this.setState({
  862. callnub: e,
  863. })
  864. this.loadDatax();
  865. }
  866. },
  867. //发布成果
  868. addClick() {
  869. this.state.RowData = {};
  870. this.setState({
  871. showDesc: true,
  872. });
  873. },
  874. //关闭发布成果
  875. closeDesc(e, s) {
  876. this.state.showDesc = e;
  877. if (s) {
  878. this.loadDatas();
  879. };
  880. },
  881. tableRowClickDate(record, index) {
  882. this.state.RowData = record;
  883. if(index!=undefined){
  884. this.setState({
  885. showDesc: true
  886. });
  887. }
  888. },
  889. render() {
  890. const {
  891. RangePicker,
  892. MonthPicker
  893. } = DatePicker;
  894. const formItemLayout = {
  895. labelCol: { span: 8 },
  896. wrapperCol: { span: 14 },
  897. };
  898. const FormItem = Form.Item;
  899. const rowSelection = {
  900. selectedRowKeys: this.state.selectedRowKeys,
  901. onChange: (selectedRowKeys, selectedRows) => {
  902. this.setState({
  903. modalVisible:false,
  904. selectedRows: selectedRows.slice(-1),
  905. selectedRowKeys: selectedRowKeys.slice(-1)
  906. });
  907. },
  908. onSelect: (recordt, selected, selectedRows) => {
  909. this.setState({
  910. modalVisible:false,
  911. recordt: recordt.id
  912. })
  913. },
  914. };
  915. const hasSelected = this.state.selectedRowKeys.length > 0;
  916. const dataSources=this.state.customerArr || [];
  917. const options = dataSources.map((group) =>
  918. <Select.Option key={group.id} value={group.name}>{group.name}</Select.Option>
  919. )
  920. const intentionState = this.props.intentionState ||'';
  921. return(
  922. <div className="user-content" >
  923. <div className="content-title">
  924. <span>客户资料管理</span>
  925. </div>
  926. <div className="user-search">
  927. <Input placeholder="客户名称"
  928. value={this.state.nameSearch}
  929. onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />
  930. <Select placeholder="省"
  931. style={{ width: 80 }}
  932. value={this.state.provinceSearch}
  933. onChange={(e) => {this.setState({ provinceSearch: e});}}>
  934. {this.state.Provinces}
  935. </Select>
  936. <span style={{marginRight:'10px'}}>
  937. <Cascader options={citySelect()} value={this.state.addressSearch} placeholder="选择城市"
  938. onChange={(e,pre) => { this.setState({ addressSearch: e }) }} />
  939. </span>
  940. <Select placeholder="选择资料质量" style={{ width: 120 }}
  941. value={this.state.dataGrade}
  942. onChange={(e) => { this.setState({ dataGrade: e }) }}>
  943. <Select.Option value="0" >有效资料</Select.Option>
  944. <Select.Option value="1" >优质资料</Select.Option>
  945. </Select>
  946. <RangePicker style={{marginRight:'10px'}}
  947. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  948. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  949. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  950. <Button type="primary" onClick={this.search}>搜索</Button>
  951. <Button onClick={this.reset}>重置</Button>
  952. </div>
  953. <div className="patent-table">
  954. <Spin spinning={this.state.loading}>
  955. <Table columns={this.state.columns}
  956. dataSource={this.state.dataSource}
  957. rowSelection={rowSelection}
  958. pagination={this.state.pagination}
  959. onRowClick={this.tableRowClick}
  960. />
  961. </Spin>
  962. </div>
  963. <Modal
  964. className="customeDetails"
  965. footer=''
  966. title="客户资料"
  967. width='1000px'
  968. visible={this.state.visitModul}
  969. onOk={this.visitOk}
  970. onCancel={this.visitCancel}
  971. >
  972. <Tabs onChange={this.callback} activeKey={this.state.callnub}>
  973. <TabPane tab="基本信息" key="0">
  974. <div>
  975. <Form layout="horizontal" onSubmit={this.newSubmit} id="demand-form">
  976. <Spin spinning={this.state.loading}>
  977. <div style={{fontSize:'18px',marginLeft:'50px',marginTop:'15px',marginBottom:'10px',color:"red",fontWeight:"bold"}}>基本信息</div>
  978. <div className="clearfix" >
  979. <FormItem className="half-item"
  980. {...formItemLayout}
  981. label="客户姓名"
  982. >
  983. <span>{this.state.identifyName}</span>
  984. </FormItem>
  985. <FormItem className="half-item"
  986. {...formItemLayout}
  987. label="资料所属人"
  988. >
  989. <span>{this.state.informationMaintainerName}</span>
  990. </FormItem>
  991. </div>
  992. <div className="clearfix" >
  993. <FormItem className="half-item"
  994. {...formItemLayout}
  995. label="企业行业">
  996. <Select placeholder="选择行业" value={this.state.industry} style={{width:'95%'}}
  997. onChange={(e)=>{this.setState({industry:e})}} disabled={true}>
  998. {
  999. industry.map(function (item) {
  1000. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1001. })
  1002. }
  1003. </Select>
  1004. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1005. </FormItem>
  1006. <FormItem className="half-item"
  1007. {...formItemLayout}
  1008. label="社会属性"
  1009. >
  1010. <Select placeholder="客户社会属性" value={this.state.societyTag} style={{width:'95%'}}
  1011. onChange={(e)=>{this.setState({societyTag:e})}} disabled={true}>
  1012. {
  1013. socialAttribute.map(function (item) {
  1014. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1015. })
  1016. }
  1017. </Select>
  1018. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1019. </FormItem>
  1020. <FormItem className="half-item"
  1021. {...formItemLayout}
  1022. label="省-市-区"
  1023. >
  1024. <Cascader options={areaSelect()} value={this.state.ProvinceCity} placeholder="选择城市" style={{width:'95%'}}
  1025. onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} disabled={true}/>
  1026. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1027. </FormItem>
  1028. <FormItem className="half-item"
  1029. {...formItemLayout}
  1030. label="注册资本"
  1031. >
  1032. <Input placeholder="注册资本" style={{width:'90%'}} value={this.state.registeredCapital} onChange={(e) => {
  1033. this.setState({ registeredCapital: e.target.value })}} disabled={true}/>万
  1034. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1035. </FormItem>
  1036. <div className='clearfix'>
  1037. <FormItem
  1038. labelCol={{ span:4 }}
  1039. wrapperCol={{ span: 20 }}
  1040. label="主营产品" >
  1041. <Input type="textarea" rows={2} value={this.state.businessScope} style={{width:'95%'}}
  1042. onChange={(e,pre) => { this.setState({ businessScope: e.target.value })}} disabled={true}/>
  1043. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1044. </FormItem>
  1045. </div>
  1046. <div style={{fontSize:'18px',marginLeft:'50px',marginTop:'15px',marginBottom:'10px',color:"red",fontWeight:"bold"}}>企业资料</div>
  1047. <FormItem className="half-item"
  1048. {...formItemLayout}
  1049. label="通信地址"
  1050. >
  1051. <Input placeholder="客户通信地址" value={this.state.postalAddress}
  1052. onChange={(e,pre) => { this.setState({ postalAddress: e.target.value }) }} disabled={true}/>
  1053. </FormItem>
  1054. <FormItem className="half-item"
  1055. {...formItemLayout}
  1056. label="固定电话"
  1057. >
  1058. <Input placeholder="客户固定电话" value={this.state.contactsFixedTel}
  1059. onChange={(e) => { this.setState({ contactsFixedTel: e.target.value }) }} disabled={true}/>
  1060. </FormItem>
  1061. <FormItem className="half-item"
  1062. {...formItemLayout}
  1063. label="客户传真"
  1064. >
  1065. <Input placeholder="客户传真" value={this.state.contactsFax}
  1066. onChange={(e) => { this.setState({ contactsFax: e.target.value })}} disabled={true}/>
  1067. </FormItem>
  1068. <FormItem className="half-item"
  1069. {...formItemLayout}
  1070. label="企业人数"
  1071. >
  1072. <Input placeholder="单位规模" value={this.state.enterpriseScale} onChange={(e) => {
  1073. this.setState({ enterpriseScale: e.target.value })}} disabled={true}/>
  1074. </FormItem>
  1075. <FormItem className="half-item"
  1076. {...formItemLayout}
  1077. label="法人名称"
  1078. >
  1079. <Input placeholder="法人名称" value={this.state.legalPerson} onChange={(e) => {
  1080. this.setState({ legalPerson: e.target.value })}} disabled={true}/>
  1081. </FormItem>
  1082. <FormItem className="half-item"
  1083. {...formItemLayout}
  1084. label="法人身份证"
  1085. >
  1086. <Input placeholder="法人身份证" value={this.state.legalPersonIdCard} onChange={(e) => {
  1087. this.setState({ legalPersonIdCard: e.target.value })}} disabled={true}/>
  1088. </FormItem>
  1089. <FormItem className="half-item"
  1090. {...formItemLayout}
  1091. label="联系人"
  1092. >
  1093. <Input placeholder="主要联系人" value={this.state.contacts} onChange={(e) => {
  1094. this.setState({ contacts: e.target.value })}} disabled={true}/>
  1095. </FormItem>
  1096. <FormItem className="half-item"
  1097. {...formItemLayout}
  1098. label="联系人号码"
  1099. >
  1100. <Input placeholder="主要联系人号码" value={this.state.contactMobile} onChange={(e) => {
  1101. this.setState({ contactMobile: e.target.value })}} disabled={true}/>
  1102. </FormItem>
  1103. <FormItem className="half-item"
  1104. {...formItemLayout}
  1105. label="法人电话"
  1106. >
  1107. <Input placeholder="法人电话" value={this.state.legalPersonTel} onChange={(e) => {
  1108. this.setState({ legalPersonTel: e.target.value })}} disabled={true}/>
  1109. </FormItem>
  1110. <FormItem className="half-item"
  1111. {...formItemLayout}
  1112. label="法人邮箱"
  1113. >
  1114. <Input placeholder="法人电子邮箱" value={this.state.legalPersonEmail}
  1115. onChange={(e) => {this.setState({legalPersonEmail: e.target.value })}} disabled={true}/>
  1116. </FormItem>
  1117. <FormItem className="half-item"
  1118. {...formItemLayout}
  1119. label="社会统一信用机构代码"
  1120. >
  1121. <Input placeholder="社会统一信用机构代码" value={this.state.orgCode} onChange={(e) => {
  1122. this.setState({ orgCode: e.target.value })}} disabled={true}/>
  1123. </FormItem>
  1124. <div className='clearfix'>
  1125. <FormItem
  1126. labelCol={{ span:4 }}
  1127. wrapperCol={{ span: 18 }}
  1128. label="客户简介" >
  1129. <Input type="textarea" rows={3} value={this.state.introduction}
  1130. onChange={(e,pre) => { this.setState({ introduction: e.target.value })}} disabled={true}/>
  1131. </FormItem>
  1132. </div>
  1133. <div className="clearfix pictures">
  1134. <FormItem style={{display:'inline-block',width:'350px',marginTop:'20px',marginLeft:'95px'}}
  1135. labelCol={{ span: 8 }}
  1136. wrapperCol={{ span: 10 }}
  1137. label="机构证书(PIC)" >
  1138. <PicturesWall
  1139. fileList={this.getOrgCodeUrl}
  1140. pictureUrl={this.state.orgCodeUrl} />
  1141. <p>建议:图片要清晰。</p>
  1142. </FormItem>
  1143. <FormItem style={{display:'inline-block',width:'350px',marginTop:'20px',marginTop:'20px'}}
  1144. labelCol={{ span: 8 }}
  1145. wrapperCol={{ span: 10 }}
  1146. label="单位LOGO" >
  1147. <PicturesWall
  1148. fileList={this.getCompanyLogoUrl}
  1149. pictureUrl={this.state.companyLogoUrl} />
  1150. <p>建议:图片要清晰。</p>
  1151. </FormItem>
  1152. </div>
  1153. <div style={{fontSize:'18px',marginLeft:'50px',marginTop:'15px',marginBottom:'10px',color:"red",fontWeight:"bold"}}>重要资料</div>
  1154. <div className='clearfix' >
  1155. <FormItem className="half-item"
  1156. {...formItemLayout}
  1157. label="客户信用等级"
  1158. >
  1159. <Select placeholder="客户信用等级" value={this.state.creditRating}
  1160. onChange={(e)=>{this.setState({creditRating:e})}} disabled={true}>
  1161. {
  1162. slcRedit.map(function (item) {
  1163. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1164. })
  1165. }
  1166. </Select>
  1167. </FormItem>
  1168. <div className='clearfix'>
  1169. <FormItem
  1170. labelCol={{ span:4 }}
  1171. wrapperCol={{ span: 19 }}
  1172. label="企业核心技术" >
  1173. <Input type="textarea" rows={3} value={this.state.coreTechnology}
  1174. onChange={(e,pre) => { this.setState({ coreTechnology: e.target.value })}} disabled={true}/>
  1175. </FormItem>
  1176. </div>
  1177. <div className='clearfix'>
  1178. <FormItem
  1179. labelCol={{ span:4 }}
  1180. wrapperCol={{ span: 19 }}
  1181. label="企业资质情况" >
  1182. <Input type="textarea" rows={3} value={this.state.qualification} placeholder="请按如下格式填写:资质名称+获得时间+拥有人+发证机构"
  1183. onChange={(e,pre) => { this.setState({ qualification: e.target.value })}} disabled={true}/>
  1184. </FormItem>
  1185. </div>
  1186. <div className='clearfix'>
  1187. <FormItem
  1188. labelCol={{ span:4 }}
  1189. wrapperCol={{ span: 19 }}
  1190. label="高企合作情况" >
  1191. <Input type="textarea" rows={3} value={this.state.cooperationSituation}
  1192. onChange={(e,pre) => { this.setState({ cooperationSituation: e.target.value })}} disabled={true}/>
  1193. </FormItem>
  1194. </div>
  1195. </div>
  1196. </div>
  1197. </Spin>
  1198. </Form>
  1199. </div>
  1200. </TabPane>
  1201. <TabPane tab="知识产权列表" key="1">
  1202. <Spin spinning={this.state.loading}>
  1203. <Table columns={this.state.columnsDate}
  1204. dataSource={this.state.dataSourceDate}
  1205. rowSelection={rowSelection}
  1206. pagination={this.state.paginationDate}
  1207. onRowClick={this.tableRowClickDate} />
  1208. </Spin>
  1209. </TabPane>
  1210. <TabPane tab="财务信息" key="2">
  1211. <Spin spinning={this.state.loading}>
  1212. <Table columns={this.state.columnsc}
  1213. dataSource={this.state.dataSourcec}
  1214. rowSelection={rowSelection}
  1215. onRowClick={this.tableRowClickDatec} />
  1216. </Spin>
  1217. </TabPane>
  1218. <TabPane tab="项目信息" key="3">
  1219. <Spin spinning={this.state.loading}>
  1220. <Table columns={this.state.columnsx}
  1221. dataSource={this.state.dataSourcex}
  1222. rowSelection={rowSelection}
  1223. onRowClick={this.tableRowClickDatex} />
  1224. </Spin>
  1225. </TabPane>
  1226. </Tabs>
  1227. </Modal>
  1228. <TechAchievementDesc
  1229. data={this.state.RowData}
  1230. detailApiUrl={this.props['data-detailApiUrl']}
  1231. achievementCategoryOption={this.state.achievementCategoryOption}
  1232. showDesc={this.state.showDesc}
  1233. uid={this.state.uid}
  1234. closeDesc={this.closeDesc}
  1235. loadDatas={this.loadDatas}
  1236. />
  1237. </div >
  1238. );
  1239. }
  1240. }));
  1241. export default IntentionCustomer;