crm.jsx 71 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884
  1. import React from 'react';
  2. import { Radio, Icon, Button, AutoComplete,Cascader,Input, Select, Spin, Popconfirm, Table, Switch, message,Calendar , DatePicker, Upload, Form ,Modal,Tabs,Card } from 'antd';
  3. import ajax from 'jquery/src/ajax/xhr.js';
  4. import $ from 'jquery/src/ajax';
  5. import Jquery from 'jquery/dist/jquery.js';
  6. import moment from 'moment';
  7. import {Document,Page}from 'react-pdf';
  8. import PDF from 'react-pdf';
  9. import 'viewer/dist/crocodoc.viewer.css';
  10. import TechAchievementDesc from '@/manageCenter/achievement/crmAchievement.jsx';
  11. import { citySelect, provinceList ,areaSelect} from '@/NewDicProvinceList';
  12. import { socialAttribute, industry, auditStatusL, lvl, currentMember ,slcRedit,dataGrade,year,xiangmoState} from '@/dataDic.js';
  13. import { getSocialAttribute, beforeUploadFile,splitUrl ,getSlcRedit,getDataGrade,getAchievementCategory,getTechAuditStatus,getboutique,getPreviews,getPreview,getXiangmoState} from '@/tools.js';
  14. import './customer.less';
  15. const TabPane = Tabs.TabPane;
  16. const Dragger = Upload.Dragger;
  17. //图片组件
  18. const PicturesWall = React.createClass({
  19. getInitialState() {
  20. return {
  21. previewVisible: false,
  22. previewImage: '',
  23. fileList: [],
  24. }
  25. },
  26. handleCancel() {
  27. this.setState({
  28. previewVisible: false
  29. })
  30. },
  31. handlePreview(file) {
  32. this.setState({
  33. previewImage: file.url || file.thumbUrl,
  34. previewVisible: true,
  35. });
  36. },
  37. handleChange(info) {
  38. let fileList = info.fileList;
  39. this.setState({
  40. fileList
  41. });
  42. this.props.fileList(fileList);
  43. },
  44. componentWillReceiveProps(nextProps) {
  45. this.state.fileList = nextProps.pictureUrl;
  46. this.state.pojectApplicationUrl = undefined;
  47. },
  48. render() {
  49. const {
  50. previewVisible,
  51. previewImage,
  52. fileList
  53. } = this.state;
  54. const uploadButton = (
  55. <div>
  56. <Icon type="plus" />
  57. <div className="ant-upload-text">点击上传</div>
  58. </div>
  59. );
  60. return(
  61. <div style={{display:"inline-block"}}>
  62. <Upload
  63. action={globalConfig.context + "/api/admin/customer/uploadCustomerImg"}
  64. data={{ 'sign': '' }}
  65. listType="picture-card"
  66. fileList={fileList}
  67. onPreview={this.handlePreview}
  68. onChange={this.handleChange} >
  69. {fileList.length >= 1 ? null : uploadButton}
  70. </Upload>
  71. <Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}>
  72. <img alt="example" style={{ width: '100%' }} src={previewImage} />
  73. </Modal>
  74. </div>
  75. );
  76. }
  77. });
  78. const IntentionCustomer = Form.create()(React.createClass({
  79. loadData(pageNo, apiUrl) {
  80. this.setState({
  81. visitModul:false,
  82. loading: true,
  83. ispage:pageNo,
  84. modalVisible:false
  85. });
  86. $.ajax({
  87. method: "post",
  88. dataType: "json",
  89. crossDomain: false,
  90. url: globalConfig.context +"/api/admin/customer/listCustomerInformation",
  91. data: {
  92. pageNo: pageNo || 1,
  93. pageSize: this.state.pagination.pageSize,
  94. name: this.state.nameSearch,
  95. dataGrade: this.state.dataGrade,
  96. follow: this.state.follow,
  97. province: !(this.state.addressSearch).length ? this.state.provinceSearch : this.state.addressSearch[0],
  98. city: !(this.state.addressSearch).length ? '' : this.state.addressSearch[1],
  99. startDate: this.state.releaseDate[0],
  100. endDate: this.state.releaseDate[1],
  101. },
  102. success: function(data) {
  103. let theArr = [];
  104. if(data.error.length || data.data.list == "") {
  105. if(data.error && data.error.length) {
  106. message.warning(data.error[0].message);
  107. };
  108. } else {
  109. for(let i = 0; i < data.data.list.length; i++) {
  110. let thisdata = data.data.list[i];
  111. let diqu=(thisdata.province==null?"":thisdata.province)+(thisdata.city==null?"":"-"+thisdata.city)+(thisdata.area==null?"":"-"+thisdata.area);
  112. theArr.push({
  113. key: i,
  114. id: thisdata.id,//用户ID
  115. type:thisdata.type,//类型
  116. name: thisdata.name,//用户名称
  117. diqu: diqu,//省市区
  118. industry: thisdata.industry,//行业
  119. contacts: thisdata.contacts,//联系人
  120. contactMobile: thisdata.contactMobile,//联系人电话
  121. createTime: thisdata.createTime,//行业
  122. });
  123. };
  124. this.state.pagination.current = data.data.pageNo;
  125. this.state.pagination.total = data.data.totalCount;
  126. };
  127. if(data.data&&data.data.list&&!data.data.list.length){
  128. this.state.pagination.current=0
  129. this.state.pagination.total=0
  130. }
  131. this.setState({
  132. dataSource: theArr,
  133. pageNo: pageNo,
  134. pagination: this.state.pagination,
  135. selectedRowKeys:[]
  136. });
  137. }.bind(this),
  138. }).always(function() {
  139. this.setState({
  140. loading: false
  141. });
  142. }.bind(this));
  143. },
  144. loadDatas(pageNos) {
  145. this.setState({
  146. loading: true,
  147. });
  148. $.ajax({
  149. method: "get",
  150. dataType: "json",
  151. crossDomain: false,
  152. url: globalConfig.context + "/api/admin/achievement/listUserAchievement",
  153. data: {
  154. pageNo: pageNos || 1,
  155. pageSize: this.state.paginationDate.pageSize,
  156. uid:this.state.uid,
  157. },
  158. success: function (data) {
  159. let theArr = [];
  160. if (!data.data || !data.data.list) {
  161. if (data.error && data.error.length) {
  162. message.warning(data.error[0].message);
  163. };
  164. } else {
  165. for (let i = 0; i < data.data.list.length; i++) {
  166. let thisdata = data.data.list[i];
  167. theArr.push({
  168. key: i,
  169. id: thisdata.id,
  170. serialNumber: thisdata.serialNumber,
  171. dataCategory: thisdata.dataCategory,
  172. name: thisdata.name,
  173. keyword: thisdata.keyword,
  174. theName: thisdata.username || thisdata.ownerName,
  175. category: thisdata.category,
  176. ownerName: thisdata.username ? thisdata.username : thisdata.ownerName,
  177. ownerType: thisdata.ownerType,
  178. ownerMobile: thisdata.ownerMobile,
  179. status: thisdata.status,
  180. releaseDate: thisdata.releaseDate,
  181. releaseDateFormattedDate: thisdata.releaseDateFormattedDate,
  182. auditStatus: thisdata.auditStatus,
  183. boutique: thisdata.boutique,
  184. hot: thisdata.hot,
  185. techBrokerId:thisdata.techBrokerId,
  186. createTimeFormattedDate: thisdata.createTimeFormattedDate,
  187. remark:thisdata.remark
  188. });
  189. };
  190. this.state.paginationDate.current = data.data.pageNo;
  191. this.state.paginationDate.total = data.data.totalCount;
  192. };
  193. this.setState({
  194. dataSourceDate: theArr,
  195. pageNos: pageNos,
  196. paginationDate: this.state.paginationDate
  197. });
  198. }.bind(this),
  199. }).always(function () {
  200. this.setState({
  201. loading: false
  202. });
  203. }.bind(this));
  204. },
  205. loadDatac(pageNo, apiUrl) {
  206. this.setState({
  207. loading: true,
  208. });
  209. $.ajax({
  210. method: "get",
  211. dataType: "json",
  212. crossDomain: false,
  213. url: globalConfig.context +"/api/admin/customers/selectListOrgAnnual",
  214. data: {
  215. // pageNo: pageNo || 1,
  216. // pageSize: this.state.pagination.pageSize,
  217. uid:this.state.uid,
  218. },
  219. success: function(data) {
  220. let theArr = [];
  221. if(data.error.length || data.data.list == "") {
  222. if(data.error && data.error.length) {
  223. message.warning(data.error[0].message);
  224. };
  225. } else {
  226. for(let i = 0; i < data.data.list.length; i++) {
  227. let thisdata = data.data.list[i];
  228. let diqu=(thisdata.province==null?"":thisdata.province)+(thisdata.city==null?"":"-"+thisdata.city)+(thisdata.area==null?"":"-"+thisdata.area);
  229. theArr.push({
  230. key: i,
  231. id: thisdata.id,//年报ID
  232. year:thisdata.year,//年份
  233. salesAmount: thisdata.salesAmount,//营销额
  234. researchAmount: thisdata.researchAmount,//研发费用
  235. assets: thisdata.assets,//总资产
  236. aid: thisdata.aid,//录入人
  237. });
  238. };
  239. // this.state.pagination.current = data.data.pageNo;
  240. // this.state.pagination.total = data.data.totalCount;
  241. };
  242. if(data.data&&data.data.list&&!data.data.list.length){
  243. this.state.pagination.current=0
  244. this.state.pagination.total=0
  245. }
  246. this.setState({
  247. dataSourcec: theArr,
  248. // pageNo: pageNo,
  249. // pagination: this.state.pagination,
  250. // selectedRowKeys:[]
  251. });
  252. }.bind(this),
  253. }).always(function() {
  254. this.setState({
  255. loading: false
  256. });
  257. }.bind(this));
  258. },
  259. loadDatax(pageNo, apiUrl) {
  260. this.setState({
  261. loading: true,
  262. });
  263. $.ajax({
  264. method: "get",
  265. dataType: "json",
  266. crossDomain: false,
  267. url: globalConfig.context +"/api/admin/customers/selectListOrgYearProject",
  268. data: {
  269. uid:this.state.uid,
  270. },
  271. success: function(data) {
  272. let theArr = [];
  273. if(data.error.length || data.data.list == "") {
  274. if(data.error && data.error.length) {
  275. message.warning(data.error[0].message);
  276. };
  277. } else {
  278. for(let i = 0; i < data.data.list.length; i++) {
  279. let thisdata = data.data.list[i];
  280. let diqu=(thisdata.province==null?"":thisdata.province)+(thisdata.city==null?"":"-"+thisdata.city)+(thisdata.area==null?"":"-"+thisdata.area);
  281. theArr.push({
  282. key: i,
  283. id: thisdata.id,//用户ID
  284. projectName:thisdata.projectName,//项目名称
  285. year: thisdata.year,//年份
  286. status: thisdata.status?thisdata.status.toString():"",//项目状态
  287. remark: thisdata.remark,//备注
  288. aid: thisdata.aid,//录入人
  289. });
  290. };
  291. // this.state.pagination.current = data.data.pageNo;
  292. // this.state.pagination.total = data.data.totalCount;
  293. };
  294. if(data.data&&data.data.list&&!data.data.list.length){
  295. this.state.pagination.current=0
  296. this.state.pagination.total=0
  297. }
  298. this.setState({
  299. dataSourcex: theArr,
  300. });
  301. }.bind(this),
  302. }).always(function() {
  303. this.setState({
  304. loading: false
  305. });
  306. }.bind(this));
  307. },
  308. getInitialState() {
  309. return {
  310. pages:1,
  311. pdfUrl:'',
  312. addressSearch: [],
  313. orgCodeUrl: [],
  314. companyLogoUrl: [],
  315. visible: false,
  316. releaseDate: [],
  317. visitModul:false,
  318. detailApi:'',
  319. followData:{},
  320. selectedRowKeys: [],
  321. selectedRows: [],
  322. loading: false,
  323. callnub:"0",
  324. pojectApplicationUrl:"",
  325. isXian:0,
  326. modalVisible:false,
  327. numPages: null,
  328. pageNumber: 1,
  329. pagec:0,
  330. pages:18,
  331. isXin:1,
  332. pagination: {
  333. defaultCurrent: 1,
  334. defaultPageSize: 10,
  335. showQuickJumper: true,
  336. pageSize: 10,
  337. onChange: function(page) {
  338. this.loadData(page);
  339. }.bind(this),
  340. showTotal: function(total) {
  341. return '共' + total + '条数据';
  342. }
  343. },
  344. paginationDate: {
  345. defaultCurrent: 1,
  346. defaultPageSize: 10,
  347. showQuickJumper: true,
  348. pageSize: 10,
  349. onChange: function(page) {
  350. this.loadDatas(page);
  351. }.bind(this),
  352. showTotal: function(total) {
  353. return '共' + total + '条数据';
  354. }
  355. },
  356. columns: [{
  357. title: '客户名称',
  358. dataIndex: 'name',
  359. key: 'name',
  360. }, {
  361. title: '地区',
  362. dataIndex: 'diqu',
  363. key: 'diqu',
  364. }, {
  365. title: '联系人',
  366. dataIndex: 'contacts',
  367. key: 'contacts',
  368. },
  369. {
  370. title: '行业',
  371. dataIndex: 'industry',
  372. key: 'industry'
  373. },
  374. {
  375. title: '联系电话',
  376. dataIndex: 'contactMobile',
  377. key: 'contactMobile',
  378. },
  379. {
  380. title: '创建时间',
  381. dataIndex: 'createTime',
  382. key: 'createTime',
  383. }
  384. ],
  385. data: [],
  386. dataSource: [],
  387. columnsDate: [
  388. {
  389. title: '编号',
  390. dataIndex: 'serialNumber',
  391. key: 'serialNumber',
  392. }, {
  393. title: '名称',
  394. dataIndex: 'name',
  395. key: 'name',
  396. }, {
  397. title: '关键字',
  398. dataIndex: 'keyword',
  399. key: 'keyword',
  400. }, {
  401. title: '类型',
  402. dataIndex: 'category',
  403. key: 'category',
  404. render: text => { return getAchievementCategory(text); }
  405. },{
  406. title: '审核状态',
  407. dataIndex: 'auditStatus',
  408. key: 'auditStatus',
  409. render: text => { return getTechAuditStatus(text) }
  410. },
  411. {
  412. title: '是否精品',
  413. dataIndex: 'boutique',
  414. key: 'boutique',
  415. render: text => { return getboutique(text) }
  416. },
  417. {
  418. title: '发布时间',
  419. dataIndex: 'releaseDateFormattedDate',
  420. key: 'releaseDateFormattedDate',
  421. },{
  422. title: '录入时间',
  423. dataIndex: 'createTimeFormattedDate',
  424. key: 'createTimeFormattedDate',
  425. },
  426. ],
  427. dataSourceDate: [],
  428. columnsc: [{
  429. title: '年份',
  430. dataIndex: 'year',
  431. key: 'year',
  432. }, {
  433. title: '营销额(万)',
  434. dataIndex: 'salesAmount',
  435. key: 'salesAmount',
  436. },
  437. {
  438. title: '总资产(万)',
  439. dataIndex: 'assets',
  440. key: 'assets'
  441. }, {
  442. title: '研发费用(万)',
  443. dataIndex: 'researchAmount',
  444. key: 'researchAmount',
  445. },{
  446. title: '操作',
  447. dataIndex: 'rrtk',
  448. key: 'rrtk',
  449. render:(text,record,index)=>{
  450. return (
  451. <div>
  452. <Popconfirm title={'您将删除该条财务信息,请确认!'} onConfirm={(e)=>{this.deltalc(record)}} okText="确认" cancelText="取消">
  453. <Button style={{marginRight:'5px'}} onClick={(e) =>{ e.stopPropagation()}} type="danger">删除</Button>
  454. </Popconfirm>
  455. </div>
  456. )
  457. }
  458. }
  459. ],
  460. dataSourcec: [],
  461. columnsx: [{
  462. title: '项目名称',
  463. dataIndex: 'projectName',
  464. key: 'projectName',
  465. },{
  466. title: '年份',
  467. dataIndex: 'year',
  468. key: 'year',
  469. },
  470. {
  471. title: '项目状态',
  472. dataIndex: 'status',
  473. key: 'status',
  474. render: text => { return getXiangmoState(text); }
  475. }, {
  476. title: '备注',
  477. dataIndex: 'remark',
  478. key: 'remark',
  479. },{
  480. title: '操作',
  481. dataIndex: 'rrtk',
  482. key: 'rrtk',
  483. render:(text,record,index)=>{
  484. return (
  485. <div>
  486. <Popconfirm title={'您将删除该项目,请确认!'} onConfirm={(e)=>{this.deltalx(record)}} okText="确认" cancelText="取消">
  487. <Button style={{marginRight:'5px'}} onClick={(e) =>{ e.stopPropagation()}} type="danger">删除</Button>
  488. </Popconfirm>
  489. </div>
  490. )
  491. }
  492. }
  493. ],
  494. dataSourcex: [],
  495. };
  496. },
  497. componentWillMount() {
  498. //城市
  499. let Province = [];
  500. provinceList.map(function(item) {
  501. var id = String(item.id)
  502. Province.push(
  503. <Select.Option value={id} key={item.name}>{item.name}</Select.Option>
  504. )
  505. });
  506. //行业
  507. let intentionalArr = [];
  508. industry.map(function(item) {
  509. intentionalArr.push(
  510. <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
  511. )
  512. });
  513. //会员等级
  514. let lvlArr = [];
  515. lvl.map(function(item) {
  516. lvlArr.push(
  517. <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
  518. )
  519. });
  520. //会员状态customerStatus
  521. let currentMemberArr = [];
  522. currentMember.map(function(item) {
  523. currentMemberArr.push(
  524. <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
  525. )
  526. });
  527. this.state.Provinces = Province;
  528. this.state.intentionalOption = intentionalArr;
  529. this.state.lvlArrOption = lvlArr;
  530. this.state.currentMemberArrOption = currentMemberArr;
  531. this.loadData();
  532. },
  533. search() {
  534. this.loadData();
  535. },
  536. reset() {
  537. this.state.nameSearch = '';
  538. this.state.addressSearch = [];
  539. this.state.dataGrade=undefined;
  540. this.state.follow=undefined;
  541. this.state.provinceSearch = undefined;
  542. this.state.citySearch = undefined;
  543. this.state.releaseDate[0] = undefined;
  544. this.state.releaseDate[1] = undefined;
  545. this.loadData();
  546. },
  547. resetc() {
  548. this.state.id=undefined;//年报ID
  549. this.state.assets=undefined;//总资产
  550. this.state.researchAmount=undefined;//研发费用
  551. this.state.salesAmount = undefined;//销售额
  552. this.state.year = undefined;//年份清零
  553. },
  554. resetx() {
  555. this.state.id=undefined;//年报ID
  556. this.state.projectName=undefined;//项目名称
  557. this.state.status=undefined;//项目状态
  558. this.state.remark = undefined;//备注
  559. this.state.year = undefined;//年份清零
  560. },
  561. //列表详情
  562. details(id) {
  563. $.ajax({
  564. method: "get",
  565. dataType: "json",
  566. crossDomain: false,
  567. url: globalConfig.context +"/api/admin/customer/findOrganizationCustomerDetail",
  568. data: {
  569. uid:id
  570. },
  571. success: function(data) {
  572. let thisDetail= data.data;
  573. if(data.error.length || data.data.list == "") {
  574. if(data.error && data.error.length) {
  575. message.warning(data.error[0].message);
  576. };
  577. } else {
  578. let ProvinceCityArr = [];
  579. let ProvinceS = thisDetail.locationProvince; //省
  580. let citys = thisDetail.locationCity;//市
  581. let Areas = thisDetail.locationArea;//区
  582. ProvinceCityArr.push(ProvinceS, citys, Areas);
  583. this.setState({
  584. detailId:thisDetail.id,//详情ID
  585. identifyName:thisDetail.identifyName,//客户名称
  586. uid:thisDetail.uid,//客户ID
  587. societyTag:thisDetail.societyTag,//社会标签
  588. companyLogoUrl:thisDetail.companyLogoUrl? splitUrl(thisDetail.companyLogoUrl, ',', globalConfig.avatarHost + '/upload') : [],//公司LOGO
  589. introduction:thisDetail.introduction,//介绍
  590. industry:thisDetail.industry?thisDetail.industry.toString():"",//行业
  591. locationProvince:thisDetail.locationProvince,//省
  592. locationCity:thisDetail.locationCity,//市
  593. locationArea:thisDetail.locationArea,//区
  594. ProvinceCity: ProvinceCityArr[0]!=null?ProvinceCityArr:undefined,//省市区
  595. postalAddress:thisDetail.postalAddress,//通讯地址
  596. contactsFixedTel:thisDetail.contactsFixedTel,//固定电话
  597. contactsFax:thisDetail.contactsFax,//传真地址
  598. registeredCapital:thisDetail.registeredCapital,//注册资金
  599. enterpriseScale:thisDetail.enterpriseScale,//企业规模
  600. legalPerson:thisDetail.legalPerson,//法人
  601. legalPersonIdCard:thisDetail.legalPersonIdCard,//法人身份证
  602. legalPersonTel:thisDetail.legalPersonTel,//法人联系电话
  603. legalPersonEmail:thisDetail.legalPersonEmail,//法人联系邮箱
  604. highTechZone:thisDetail.highTechZone,//是否高新
  605. listed:thisDetail.listed,//是否高新
  606. international:thisDetail.international,//是否国际化
  607. orgCode:thisDetail.orgCode,//社会统一机构
  608. orgCodeUrl:thisDetail.orgCodeUrl? splitUrl(thisDetail.orgCodeUrl, ',', globalConfig.avatarHost + '/upload') : [],//社会统一机构地址
  609. businessScope:thisDetail.businessScope,//业务范围
  610. contacts:thisDetail.contacts,//主要联系人姓名
  611. contactMobile:thisDetail.contactMobile,//主要联系人电话
  612. investment:thisDetail.investment,//投资机构
  613. businessAudit:thisDetail.businessAudit,//业务认证
  614. auditStatus:thisDetail.auditStatus,//实名认证
  615. intellectualProperty:thisDetail.intellectualProperty,//已有知识产权情况
  616. yearSalesAmount:thisDetail.yearSalesAmount,//年度销售额
  617. lastYearResearchAmount:thisDetail.lastYearResearchAmount,//上年度研发费用
  618. assets:thisDetail.assets,//总资产
  619. qualification:thisDetail.qualification,//企业资质情况
  620. cooperationSituation:thisDetail.cooperationSituation,//企业与高校院所
  621. informationMaintainer:thisDetail.informationMaintainer,//资料维护人
  622. informationMaintainerName:thisDetail.informationMaintainerName,//资料维护人
  623. coreTechnology:thisDetail.coreTechnology,//核心技术
  624. accomplishSituation:thisDetail.accomplishSituation,//客户已完成项目情况
  625. creditRating:thisDetail.creditRating?thisDetail.creditRating.toString():"",//信用等级
  626. pojectApplicationUrl:thisDetail.pojectApplicationUrl,//文件地址
  627. });
  628. }}.bind(this),
  629. }).always(function() {
  630. this.setState({
  631. loading: false
  632. });
  633. }.bind(this));
  634. },
  635. //基本信息提交
  636. newSubmit(e) {
  637. e.preventDefault();
  638. if(!this.state.industry) {
  639. message.warning('请选择行业');
  640. return false;
  641. };
  642. if(!this.state.societyTag) {
  643. message.warning('请选择社会属性');
  644. return false;
  645. };
  646. if(!this.state.ProvinceCity[1]) {
  647. message.warning('请选择地区');
  648. return false;
  649. };
  650. if(!this.state.registeredCapital) {
  651. message.warning('请填写注册资本');
  652. return false;
  653. };
  654. if(!this.state.businessScope) {
  655. message.warning('请填写公司主营产品');
  656. return false;
  657. };
  658. var reg = /^[1-9]\d*$|^0$/;
  659. if(this.state.consultationPrice) {
  660. if(this.state.consultationPrice.length > 6) {
  661. message.warning('咨询费用不超过6位数');
  662. this.refs.consul.focus();
  663. return false;
  664. };
  665. if(!reg.test(this.state.consultationPrice)) {
  666. message.warning('咨询费用只能输入数字');
  667. this.refs.consul.focus();
  668. return false;
  669. }
  670. }
  671. this.state.data = [];
  672. this.setState({
  673. selectedRowKeys: [],
  674. });
  675. let theorgCodeUrl = [];
  676. if(this.state.orgCodeUrl.length) {
  677. let picArr = [];
  678. this.state.orgCodeUrl.map(function(item) {
  679. if(item.response && item.response.data && item.response.data.length) {
  680. picArr.push(item.response.data);
  681. }
  682. });
  683. theorgCodeUrl = picArr.join(",");
  684. };
  685. let thecompanyLogoUrl = [];
  686. if(this.state.companyLogoUrl.length) {
  687. let picArr = [];
  688. this.state.companyLogoUrl.map(function(item) {
  689. if(item.response && item.response.data && item.response.data.length) {
  690. picArr.push(item.response.data);
  691. }
  692. });
  693. thecompanyLogoUrl = picArr.join(",");
  694. };
  695. let years = [];
  696. let yearMonth = this.state.yearMonth != undefined ? new Date(this.state.yearMonth).toLocaleDateString() : '';
  697. years = yearMonth.split('/');
  698. this.setState({
  699. loading: true
  700. });
  701. $.ajax({
  702. method: "post",
  703. dataType: "json",
  704. url: globalConfig.context + '/api/admin/customer/updateOrganizationCustomer',
  705. data: {
  706. id:this.state.detailId,//详情ID
  707. identifyName:this.state.identifyName,//客户名称
  708. uid:this.state.uid,//客户ID
  709. societyTag:this.state.societyTag,//社会标签
  710. companyLogoUrl:thecompanyLogoUrl.length != 0 ? thecompanyLogoUrl : '',//公司LOGO
  711. introduction:this.state.introduction,//介绍
  712. industry:this.state.industry,//行业
  713. locationProvince:(this.state.ProvinceCity)[0],//省
  714. locationCity:(this.state.ProvinceCity)[1],//市
  715. locationArea:(this.state.ProvinceCity)[2],//区
  716. postalAddress:this.state.postalAddress,//通讯地址
  717. contactsFixedTel:this.state.contactsFixedTel,//固定电话
  718. contactsFax:this.state.contactsFax,//传真地址
  719. registeredCapital:this.state.registeredCapital,//注册资金
  720. enterpriseScale:this.state.enterpriseScale,//企业规模
  721. legalPerson:this.state.legalPerson,//法人
  722. legalPersonIdCard:this.state.legalPersonIdCard,//法人身份证
  723. legalPersonTel:this.state.legalPersonTel,//法人联系电话
  724. legalPersonEmail:this.state.legalPersonEmail,//法人联系邮箱
  725. highTechZone:this.state.highTechZone,//是否高新
  726. listed:this.state.listed,//是否高新
  727. international:this.state.international,//是否国际化
  728. orgCode:this.state.orgCode,//社会统一机构
  729. orgCodeUrl: theorgCodeUrl.length != 0 ? theorgCodeUrl : '',//社会统一机构地址
  730. businessScope:this.state.businessScope,//业务范围
  731. contacts:this.state.contacts,//主要联系人姓名
  732. contactMobile:this.state.contactMobile,//主要联系人电话
  733. investment:this.state.investment,//投资机构
  734. businessAudit:this.state.businessAudit,//业务认证
  735. auditStatus:this.state.auditStatus,//实名认证
  736. intellectualProperty:this.state.intellectualProperty,//已有知识产权情况
  737. qualification:this.state.qualification,//企业资质情况
  738. cooperationSituation:this.state.cooperationSituation,//企业与高校院所
  739. informationMaintainer:this.state.informationMaintainer,//资料维护人
  740. informationMaintainerName:this.state.informationMaintainerName,//资料维护人
  741. coreTechnology:this.state.coreTechnology,//核心技术
  742. creditRating:this.state.creditRating,//信用等级
  743. pojectApplicationUrl:this.state.pojectApplicationUrl,//文件地址
  744. }
  745. }).done(function(data) {
  746. this.setState({
  747. loading: false
  748. });
  749. if(!data.error.length) {
  750. message.success('保存成功!');
  751. this.visitCancel();
  752. this.loadData(this.state.pageNo);
  753. } else {
  754. message.warning(data.error[0].message);
  755. }
  756. }.bind(this));
  757. },
  758. //财务信息提交
  759. newSubmitc(e) {
  760. e.preventDefault();
  761. if(!this.state.year) {
  762. message.warning('请选择年份');
  763. return false;
  764. };
  765. this.setState({
  766. loading: true
  767. });
  768. $.ajax({
  769. method: "post",
  770. dataType: "json",
  771. url: globalConfig.context + this.state.isXin==1?'/api/admin/customers/addOrgAnnual':'/api/admin/customers/updateOrgAnnual',
  772. data: {
  773. id:this.state.id?this.state.id:undefined,//年报ID
  774. uid:this.state.uid,//客户ID
  775. year:this.state.year,//年份
  776. researchAmount:this.state.researchAmount,//研发费用
  777. assets:this.state.assets,//总资产
  778. salesAmount:this.state.salesAmount,//销售额
  779. }
  780. }).done(function(data) {
  781. this.setState({
  782. loading: false
  783. });
  784. if(!data.error.length) {
  785. message.success('保存成功!');
  786. this.visitCancelc();
  787. this.loadDatac();
  788. } else {
  789. message.warning(data.error[0].message);
  790. }
  791. }.bind(this));
  792. },
  793. //财务信息提交
  794. newSubmitx(e) {
  795. e.preventDefault();
  796. if(!this.state.year) {
  797. message.warning('请选择年份');
  798. return false;
  799. };
  800. this.setState({
  801. loading: true
  802. });
  803. $.ajax({
  804. method: "post",
  805. dataType: "json",
  806. url: globalConfig.context + this.state.isXinx==1?'/api/admin/customers/addOrgYearProject':'/api/admin/customers/updateOrgYearProject',
  807. data: {
  808. id:this.state.id?this.state.id:undefined,//年报ID
  809. uid:this.state.uid,//客户ID
  810. year:this.state.year,//年份
  811. projectName:this.state.projectName,//研发费用
  812. status:this.state.status,//总资产
  813. remark:this.state.remark,//销售额
  814. }
  815. }).done(function(data) {
  816. this.setState({
  817. loading: false
  818. });
  819. if(!data.error.length) {
  820. message.success('保存成功!');
  821. this.visitCancelc();
  822. this.loadDatax();
  823. } else {
  824. message.warning(data.error[0].message);
  825. }
  826. }.bind(this));
  827. },
  828. //获取ID
  829. getStateData(id) {
  830. this.setState({
  831. loading: true
  832. });
  833. $.ajax({
  834. method: "post",
  835. dataType: "json",
  836. crossDomain: false,
  837. url: globalConfig.context + "/api/admin/techproject/techProjectLog",
  838. data: {
  839. pid: id || this.props.data.id
  840. },
  841. success: function (data) {
  842. if (!data.data) {
  843. if (data.error && data.error.length) {
  844. message.warning(data.error[0].message);
  845. };
  846. return;
  847. };
  848. var myDate = new Date();
  849. this.state.stateTable = [];
  850. for (let i = 0; i < data.data.length; i++) {
  851. this.state.stateTable.push({
  852. key: i,
  853. state: data.data[i].state,
  854. recordTime: data.data[i].recordTime,
  855. recordTimeFormattedDate: data.data[i].recordTimeFormattedDate,
  856. principal: data.data[i].principal,
  857. operator: data.data[i].operator,
  858. comment: data.data[i].comment
  859. });
  860. };
  861. }.bind(this),
  862. }).always(function () {
  863. this.setState({
  864. loading: false
  865. });
  866. }.bind(this));
  867. },
  868. //整行点击
  869. tableRowClick(record, index) {
  870. this.state.visitModul=true;
  871. this.state.pojectApplicationUrl = undefined;
  872. this.state.isXian=0;
  873. this.details(record.id);
  874. },
  875. //指定转交人自动补全
  876. supervisor(e){
  877. $.ajax({
  878. method: "get",
  879. dataType: "json",
  880. crossDomain: false,
  881. url: globalConfig.context + "/api/admin/customer/listAdminByName",
  882. data:{
  883. adminName:e
  884. },
  885. success: function (data) {
  886. let thedata=data.data;
  887. if (!thedata) {
  888. if (data.error && data.error.length) {
  889. message.warning(data.error[0].message);
  890. };
  891. thedata = {};
  892. };
  893. this.setState({
  894. customerArr:thedata,
  895. });
  896. }.bind(this),
  897. }).always(function () {
  898. this.setState({
  899. loading: false
  900. });
  901. }.bind(this));
  902. },
  903. //输入转交人输入框失去焦点是判断客户是否存在
  904. selectAuto(value,options){
  905. this.setState({
  906. auto:value
  907. })
  908. },
  909. blurChange(e){
  910. let theType='';
  911. let contactLists=this.state.customerArr||[];
  912. if (e) {
  913. contactLists.map(function (item) {
  914. if (item.name == e.toString()) {
  915. theType = item.id;
  916. }
  917. });
  918. }
  919. this.setState({
  920. theTypes:theType
  921. })
  922. },
  923. //值改变时请求客户名称
  924. httpChange(e){
  925. if(e.length>=1){
  926. this.supervisor(e);
  927. }
  928. this.setState({
  929. auto:e
  930. })
  931. },
  932. //转交
  933. changeAssigner() {
  934. if(this.state.theTypes){
  935. this.setState({
  936. selectedRowKeys: [],
  937. });
  938. let id;
  939. for(let idx = 0; idx < this.state.selectedRows.length; idx++) {
  940. let rowItem = this.state.selectedRows[idx];
  941. if(rowItem.id) {
  942. id=rowItem.id;
  943. };
  944. };
  945. $.ajax({
  946. method: "post",
  947. dataType: "json",
  948. crossDomain: false,
  949. url: globalConfig.context + "/api/admin/customer/updateInformationMaintainerr",
  950. data: {
  951. id: id, //客户ID
  952. aid: this.state.theTypes, //指定转交人的ID
  953. }
  954. }).done(function(data) {
  955. if(!data.error.length) {
  956. message.success('转交成功!');
  957. this.setState({
  958. auto:'',
  959. loading: false,
  960. });
  961. } else {
  962. message.warning(data.error[0].message);
  963. };
  964. this.loadData(Math.min(this.state.pageNo==undefined?1:this.state.pageNo,Math.ceil((this.state.pagination.total-1)/10)));
  965. }.bind(this));
  966. }else{
  967. message.warning('请输入转交人姓名')
  968. }
  969. },
  970. //详情打开
  971. visitOk(e) {
  972. this.setState({
  973. visitModul: false
  974. });
  975. },
  976. //详情关闭
  977. visitCancel(e) {
  978. this.state.fileList = [];
  979. this.setState({
  980. visitModul: false,
  981. callnub:"0"
  982. });
  983. },
  984. //新增年报打开
  985. visitOkc(e) {
  986. this.setState({
  987. visitModulc: true,
  988. visitModulx: true
  989. });
  990. },
  991. //新增年报关闭
  992. visitCancelc(e) {
  993. this.resetc();
  994. this.resetx();
  995. this.setState({
  996. visitModulc: false,
  997. visitModulx: false,
  998. });
  999. },
  1000. //PDF打开
  1001. visitOk1(e) {
  1002. this.getPrevie(this.state.uid, 'techProject', 'organization_application');
  1003. this.setState({
  1004. visitModul1: true
  1005. });
  1006. },
  1007. //PDF关闭
  1008. visitCancel1(e) {
  1009. this.setState({
  1010. visitModul1: false,
  1011. loading:false,
  1012. });
  1013. },
  1014. //获取PDF地址
  1015. getPrevie(id,url,sign){
  1016. $.ajax({
  1017. method: "get",
  1018. dataType: "json",
  1019. crossDomain: false,
  1020. url: globalConfig.context + "/api/admin/customer/" + url,
  1021. data:{
  1022. "id": id,
  1023. "sign": sign
  1024. },
  1025. success: function (data) {
  1026. if (!data.data) {
  1027. if ( data.error && data.error.length ) {
  1028. message.warning(data.error[0].message);
  1029. };
  1030. };
  1031. this.setState({
  1032. pdfUrl: location.origin + globalConfig.context + "/open/preview?" + data.data,
  1033. });
  1034. }.bind(this)
  1035. });
  1036. },
  1037. //PDF分页
  1038. //一开始就加载这个函数
  1039. onDocumentComplete (pages) {
  1040. this.setState({
  1041. loading: true,
  1042. });
  1043. this.setState({ pagec:0, pages:pages.total });
  1044. },
  1045. //随后
  1046. onPageComplete (pagec) {
  1047. this.setState({ pagec });
  1048. },
  1049. handlePrevious (){
  1050. this.setState({ pagec: this.state.pagec - 1 });
  1051. },
  1052. handleNext (){
  1053. this.setState({ pagec: this.state.pagec + 1 });
  1054. },
  1055. renderPagination (pagec,pages) {
  1056. let previousButton = <li className="previous" onClick={this.handlePrevious}><a href="#"><span className="fa fa-arrow-left">上一页</span> </a></li>;
  1057. if (pagec==0) {
  1058. previousButton = <li className="previous disabled"><a href="#"><span className="fa fa-arrow-left">上一页</span> </a></li>;
  1059. }
  1060. let nextButton = <li className="next" onClick={this.handleNext}><a href="#"> <span className="fa fa-arrow-right">下一页</span></a></li>;
  1061. if (pagec==pages) {
  1062. nextButton = <li className="next disabled"><a href="#"> <span className="fa fa-arrow-right">下一页</span></a></li>;
  1063. }
  1064. return (
  1065. <nav>
  1066. <ul className="pager">
  1067. {previousButton}
  1068. {nextButton}
  1069. </ul>
  1070. </nav>
  1071. );
  1072. },
  1073. //上面是做PDF分页的
  1074. getOrgCodeUrl(e) {
  1075. this.setState({ orgCodeUrl: e });
  1076. },
  1077. getCompanyLogoUrl(e) {
  1078. this.setState({ companyLogoUrl: e });
  1079. },
  1080. componentWillReceiveProps(nextProps) {
  1081. if(nextProps.ApiUrl!=this.props.ApiUrl) {
  1082. this.state.nameSearch = '';
  1083. this.state.addressSearch = [];
  1084. this.state.provinceSearch = undefined;
  1085. this.state.citySearch = undefined;
  1086. this.state.releaseDate[0] = undefined;
  1087. this.state.releaseDate[1] = undefined;
  1088. this.loadData(null,nextProps.ApiUrl);
  1089. };
  1090. },
  1091. callback(e) {
  1092. if(e == '0') {
  1093. this.setState({
  1094. callnub: e,
  1095. })
  1096. }
  1097. if(e == '1') {
  1098. this.setState({
  1099. callnub: e,
  1100. })
  1101. this.loadDatas();
  1102. }
  1103. if(e == '2') {
  1104. this.setState({
  1105. callnub: e,
  1106. })
  1107. this.loadDatac();
  1108. }
  1109. if(e == '3') {
  1110. this.setState({
  1111. callnub: e,
  1112. })
  1113. this.loadDatax();
  1114. }
  1115. },
  1116. //发布成果
  1117. addClick() {
  1118. this.state.RowData = {};
  1119. this.setState({
  1120. showDesc: true,
  1121. });
  1122. },
  1123. //新增财务信息
  1124. addClickc() {
  1125. this.state.RowData = {};
  1126. this.resetc();
  1127. this.setState({
  1128. visitModulc: true,
  1129. isXin:1,
  1130. });
  1131. },
  1132. //新增项目信息
  1133. addClickx() {
  1134. this.state.RowData = {};
  1135. this.resetx();
  1136. this.setState({
  1137. visitModulx: true,
  1138. isXinx:1,
  1139. });
  1140. },
  1141. //关闭发布成果
  1142. closeDesc(e, s) {
  1143. this.state.showDesc = e;
  1144. if (s) {
  1145. this.loadDatas();
  1146. };
  1147. },
  1148. //客户资料每行点击
  1149. tableRowClickDate(record, index) {
  1150. this.state.RowData = record;
  1151. if(index!=undefined){
  1152. this.setState({
  1153. showDesc: true
  1154. });
  1155. }
  1156. },
  1157. //年度每行点击
  1158. tableRowClickDatec(record, index) {
  1159. this.state.RowData = record;
  1160. if(index!=undefined){
  1161. this.setState({
  1162. isXin:2,
  1163. visitModulc: true,
  1164. year:record.year.toString(),//年份
  1165. id:record.id,//年报详情ID
  1166. assets:record.assets,//总资产
  1167. researchAmount:record.researchAmount,//研发费用
  1168. salesAmount:record.salesAmount,//销售额
  1169. });
  1170. }
  1171. },
  1172. //项目每行点击
  1173. tableRowClickDatex(record, index) {
  1174. this.state.RowData = record;
  1175. if(index!=undefined){
  1176. this.setState({
  1177. isXinx:2,
  1178. visitModulx: true,
  1179. year:record.year.toString(),//年份
  1180. id:record.id,//年报详情ID
  1181. projectName:record.projectName,//项目名称
  1182. status:record.status.toString(),//项目状态
  1183. remark:record.remark,//销售额
  1184. });
  1185. }
  1186. },
  1187. //删除财务信息
  1188. deltalc(record){
  1189. this.setState({
  1190. loading: true
  1191. });
  1192. $.ajax({
  1193. method: "post",
  1194. dataType: "json",
  1195. crossDomain: false,
  1196. url: globalConfig.context + '/api/admin/customers/delectOrgAnnual',
  1197. data: {
  1198. id:record.id,
  1199. uid:record.uid
  1200. }
  1201. }).done(function (data) {
  1202. if (!data.error.length) {
  1203. message.success('操作成功');
  1204. this.setState({
  1205. loading: false,
  1206. });
  1207. this.loadDatac();
  1208. } else {
  1209. message.warning(data.error[0].message);
  1210. };
  1211. }.bind(this));
  1212. },
  1213. //删除财务信息
  1214. deltalx(record){
  1215. this.setState({
  1216. loading: true
  1217. });
  1218. $.ajax({
  1219. method: "post",
  1220. dataType: "json",
  1221. crossDomain: false,
  1222. url: globalConfig.context + '/api/admin/customers/delectOrgYearProject',
  1223. data: {
  1224. id:record.id,
  1225. uid:record.uid
  1226. }
  1227. }).done(function (data) {
  1228. if (!data.error.length) {
  1229. message.success('操作成功');
  1230. this.setState({
  1231. loading: false,
  1232. });
  1233. this.loadDatax();
  1234. } else {
  1235. message.warning(data.error[0].message);
  1236. };
  1237. }.bind(this));
  1238. },
  1239. render() {
  1240. let paginationss = null;
  1241. if (this.state.pagec>=0) {
  1242. paginationss = this.renderPagination(this.state.pagec, this.state.pages);
  1243. }
  1244. const {
  1245. RangePicker,
  1246. MonthPicker
  1247. } = DatePicker;
  1248. const formItemLayout = {
  1249. labelCol: { span: 8 },
  1250. wrapperCol: { span: 14 },
  1251. };
  1252. const formItemLayoutc = {
  1253. labelCol: { span: 6 },
  1254. wrapperCol: { span: 14 },
  1255. };
  1256. const FormItem = Form.Item;
  1257. const rowSelection = {
  1258. selectedRowKeys: this.state.selectedRowKeys,
  1259. onChange: (selectedRowKeys, selectedRows) => {
  1260. this.setState({
  1261. modalVisible:false,
  1262. selectedRows: selectedRows.slice(-1),
  1263. selectedRowKeys: selectedRowKeys.slice(-1)
  1264. });
  1265. },
  1266. onSelect: (recordt, selected, selectedRows) => {
  1267. this.setState({
  1268. modalVisible:false,
  1269. recordt: recordt.id
  1270. })
  1271. },
  1272. };
  1273. const hasSelected = this.state.selectedRowKeys.length > 0;
  1274. const dataSources=this.state.customerArr || [];
  1275. const options = dataSources.map((group) =>
  1276. <Select.Option key={group.id} value={group.name}>{group.name}</Select.Option>
  1277. )
  1278. const intentionState = this.props.intentionState ||'';
  1279. const props = {
  1280. name: 'file',
  1281. multiple: true,
  1282. action: '/api/admin/techproject/upload',
  1283. onChange(info) {
  1284. const status = info.file.status;
  1285. if (status !== 'uploading') {
  1286. }
  1287. if (status === 'done') {
  1288. message.success(`${info.file.name} file uploaded successfully.`);
  1289. } else if (status === 'error') {
  1290. message.error(`${info.file.name} file upload failed.`);
  1291. }
  1292. },
  1293. };
  1294. let pdfUrl =this.state.pdfUrl||'';
  1295. return(
  1296. <div className="user-content" >
  1297. <div className="content-title">
  1298. <span>客户资料维护</span>
  1299. </div>
  1300. <div className="user-search">
  1301. <Input placeholder="客户名称"
  1302. value={this.state.nameSearch}
  1303. onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />
  1304. <Select placeholder="省"
  1305. style={{ width: 80 }}
  1306. value={this.state.provinceSearch}
  1307. onChange={(e) => {this.setState({ provinceSearch: e});}}>
  1308. {this.state.Provinces}
  1309. </Select>
  1310. <span style={{marginRight:'10px'}}>
  1311. <Cascader options={citySelect()} value={this.state.addressSearch} placeholder="选择城市"
  1312. onChange={(e,pre) => { this.setState({ addressSearch: e }) }} />
  1313. </span>
  1314. <Select placeholder="选择资料质量" style={{ width: 120 }}
  1315. value={this.state.dataGrade}
  1316. onChange={(e) => { this.setState({ dataGrade: e }) }}>
  1317. <Select.Option value="0" >有效资料</Select.Option>
  1318. <Select.Option value="1" >优质资料</Select.Option>
  1319. </Select>
  1320. <Select placeholder="是否面谈客户" style={{ width: 120 }}
  1321. value={this.state.follow}
  1322. onChange={(e) => { this.setState({ follow: e }) }}>
  1323. <Select.Option value="0" >否</Select.Option>
  1324. <Select.Option value="1" >是</Select.Option>
  1325. </Select>
  1326. <RangePicker style={{marginRight:'10px'}}
  1327. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  1328. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  1329. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  1330. <Button type="primary" onClick={this.search}>搜索</Button>
  1331. <Button onClick={this.reset}>重置</Button>
  1332. <AutoComplete
  1333. className="certain-category-search"
  1334. dropdownClassName="certain-category-search-dropdown"
  1335. dropdownMatchSelectWidth={false}
  1336. dropdownStyle={{ width: 120 }}
  1337. style={{ width: '120px'}}
  1338. dataSource={options}
  1339. placeholder="输入转交人姓名"
  1340. value={this.state.auto}
  1341. onChange={this.httpChange}
  1342. filterOption={true}
  1343. onBlur={this.blurChange}
  1344. onSelect={this.selectAuto}
  1345. disabled={!hasSelected}
  1346. >
  1347. <Input />
  1348. </AutoComplete>
  1349. <Button type="primary" onClick={this.changeAssigner} disabled={!hasSelected} >转交</Button>
  1350. </div>
  1351. <div className="patent-table">
  1352. <Spin spinning={this.state.loading}>
  1353. <Table columns={this.state.columns}
  1354. dataSource={this.state.dataSource}
  1355. rowSelection={rowSelection}
  1356. pagination={this.state.pagination}
  1357. onRowClick={this.tableRowClick}
  1358. />
  1359. </Spin>
  1360. </div>
  1361. <Modal
  1362. className="customeDetails"
  1363. footer=''
  1364. title="客户资料"
  1365. width='1000px'
  1366. visible={this.state.visitModul}
  1367. onOk={this.visitOk}
  1368. onCancel={this.visitCancel}
  1369. >
  1370. <Tabs onChange={this.callback} activeKey={this.state.callnub}>
  1371. <TabPane tab="基本信息" key="0">
  1372. <div>
  1373. <Form layout="horizontal" onSubmit={this.newSubmit} id="demand-form">
  1374. <Spin spinning={this.state.loading}>
  1375. <div style={{fontSize:'18px',marginLeft:'50px',marginTop:'15px',marginBottom:'10px',color:"red",fontWeight:"bold"}}>基本信息</div>
  1376. <div className="clearfix" >
  1377. <FormItem className="half-item"
  1378. {...formItemLayout}
  1379. label="客户姓名"
  1380. >
  1381. <span>{this.state.identifyName}</span>
  1382. </FormItem>
  1383. <FormItem className="half-item"
  1384. {...formItemLayout}
  1385. label="资料所属人"
  1386. >
  1387. <span>{this.state.informationMaintainerName}</span>
  1388. </FormItem>
  1389. </div>
  1390. <div className="clearfix" >
  1391. <FormItem className="half-item"
  1392. {...formItemLayout}
  1393. label="企业行业">
  1394. <Select placeholder="选择行业" value={this.state.industry} style={{width:'95%'}}
  1395. onChange={(e)=>{this.setState({industry:e})}}>
  1396. {
  1397. industry.map(function (item) {
  1398. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1399. })
  1400. }
  1401. </Select>
  1402. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1403. </FormItem>
  1404. <FormItem className="half-item"
  1405. {...formItemLayout}
  1406. label="社会属性"
  1407. >
  1408. <Select placeholder="客户社会属性" value={this.state.societyTag} style={{width:'95%'}}
  1409. onChange={(e)=>{this.setState({societyTag:e})}}>
  1410. {
  1411. socialAttribute.map(function (item) {
  1412. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1413. })
  1414. }
  1415. </Select>
  1416. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1417. </FormItem>
  1418. <FormItem className="half-item"
  1419. {...formItemLayout}
  1420. label="省-市-区"
  1421. >
  1422. <Cascader options={areaSelect()} value={this.state.ProvinceCity} placeholder="选择城市" style={{width:'95%'}}
  1423. onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} />
  1424. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1425. </FormItem>
  1426. <FormItem className="half-item"
  1427. {...formItemLayout}
  1428. label="注册资本"
  1429. >
  1430. <Input placeholder="注册资本" style={{width:'90%'}} value={this.state.registeredCapital} onChange={(e) => {
  1431. this.setState({ registeredCapital: e.target.value }) }} />万
  1432. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1433. </FormItem>
  1434. <div className='clearfix'>
  1435. <FormItem
  1436. labelCol={{ span:4 }}
  1437. wrapperCol={{ span: 20 }}
  1438. label="主营产品" >
  1439. <Input type="textarea" rows={2} value={this.state.businessScope} style={{width:'95%'}}
  1440. onChange={(e,pre) => { this.setState({ businessScope: e.target.value })}}/>
  1441. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1442. </FormItem>
  1443. </div>
  1444. <div style={{fontSize:'18px',marginLeft:'50px',marginTop:'15px',marginBottom:'10px',color:"red",fontWeight:"bold"}}>企业资料</div>
  1445. <FormItem className="half-item"
  1446. {...formItemLayout}
  1447. label="通信地址"
  1448. >
  1449. <Input placeholder="客户通信地址" value={this.state.postalAddress}
  1450. onChange={(e,pre) => { this.setState({ postalAddress: e.target.value }) }}/>
  1451. </FormItem>
  1452. <FormItem className="half-item"
  1453. {...formItemLayout}
  1454. label="固定电话"
  1455. >
  1456. <Input placeholder="客户固定电话" value={this.state.contactsFixedTel}
  1457. onChange={(e) => { this.setState({ contactsFixedTel: e.target.value }) }}/>
  1458. </FormItem>
  1459. <FormItem className="half-item"
  1460. {...formItemLayout}
  1461. label="客户传真"
  1462. >
  1463. <Input placeholder="客户传真" value={this.state.contactsFax}
  1464. onChange={(e) => { this.setState({ contactsFax: e.target.value })}}/>
  1465. </FormItem>
  1466. <FormItem className="half-item"
  1467. {...formItemLayout}
  1468. label="企业人数"
  1469. >
  1470. <Input placeholder="单位规模" value={this.state.enterpriseScale} onChange={(e) => {
  1471. this.setState({ enterpriseScale: e.target.value })}}/>
  1472. </FormItem>
  1473. <FormItem className="half-item"
  1474. {...formItemLayout}
  1475. label="法人名称"
  1476. >
  1477. <Input placeholder="法人名称" value={this.state.legalPerson} onChange={(e) => {
  1478. this.setState({ legalPerson: e.target.value })}}/>
  1479. </FormItem>
  1480. <FormItem className="half-item"
  1481. {...formItemLayout}
  1482. label="法人身份证"
  1483. >
  1484. <Input placeholder="法人身份证" value={this.state.legalPersonIdCard} onChange={(e) => {
  1485. this.setState({ legalPersonIdCard: e.target.value })}}/>
  1486. </FormItem>
  1487. <FormItem className="half-item"
  1488. {...formItemLayout}
  1489. label="联系人"
  1490. >
  1491. <Input placeholder="联系人名称" value={this.state.contacts} onChange={(e) => {
  1492. this.setState({ contacts: e.target.value })}}/>
  1493. </FormItem>
  1494. <FormItem className="half-item"
  1495. {...formItemLayout}
  1496. label="联系人号码"
  1497. >
  1498. <Input placeholder="联系人号码" value={this.state.contactMobile} onChange={(e) => {
  1499. this.setState({ contactMobile: e.target.value })}}/>
  1500. </FormItem>
  1501. <FormItem className="half-item"
  1502. {...formItemLayout}
  1503. label="法人电话"
  1504. >
  1505. <Input placeholder="法人电话" value={this.state.legalPersonTel} onChange={(e) => {
  1506. this.setState({ legalPersonTel: e.target.value })}}/>
  1507. </FormItem>
  1508. <FormItem className="half-item"
  1509. {...formItemLayout}
  1510. label="法人邮箱"
  1511. >
  1512. <Input placeholder="法人电子邮箱" value={this.state.legalPersonEmail}
  1513. onChange={(e) => {this.setState({legalPersonEmail: e.target.value })}}/>
  1514. </FormItem>
  1515. <FormItem className="half-item"
  1516. {...formItemLayout}
  1517. label="社会统一信用机构代码"
  1518. >
  1519. <Input placeholder="社会统一信用机构代码" value={this.state.orgCode} onChange={(e) => {
  1520. this.setState({ orgCode: e.target.value })}}/>
  1521. </FormItem>
  1522. <div className='clearfix'>
  1523. <FormItem
  1524. labelCol={{ span:4 }}
  1525. wrapperCol={{ span: 18 }}
  1526. label="客户简介" >
  1527. <Input type="textarea" rows={3} value={this.state.introduction}
  1528. onChange={(e,pre) => { this.setState({ introduction: e.target.value })}}/>
  1529. </FormItem>
  1530. </div>
  1531. <div className="clearfix pictures">
  1532. <FormItem style={{display:'inline-block',width:'350px',marginTop:'20px',marginLeft:'95px'}}
  1533. labelCol={{ span: 8 }}
  1534. wrapperCol={{ span: 10 }}
  1535. label="机构证书(PIC)" >
  1536. <PicturesWall
  1537. fileList={this.getOrgCodeUrl}
  1538. pictureUrl={this.state.orgCodeUrl} />
  1539. <p>建议:图片要清晰。</p>
  1540. </FormItem>
  1541. <FormItem style={{display:'inline-block',width:'350px',marginTop:'20px',marginTop:'20px'}}
  1542. labelCol={{ span: 8 }}
  1543. wrapperCol={{ span: 10 }}
  1544. label="单位LOGO" >
  1545. <PicturesWall
  1546. fileList={this.getCompanyLogoUrl}
  1547. pictureUrl={this.state.companyLogoUrl} />
  1548. <p>建议:图片要清晰。</p>
  1549. </FormItem>
  1550. </div>
  1551. <div style={{fontSize:'18px',marginLeft:'50px',marginTop:'15px',marginBottom:'10px',color:"red",fontWeight:"bold"}}>重要资料</div>
  1552. <div className='clearfix' >
  1553. <FormItem className="half-item"
  1554. {...formItemLayout}
  1555. label="客户信用等级"
  1556. >
  1557. <Select placeholder="客户信用等级" value={this.state.creditRating} style={{width:'90%'}}
  1558. onChange={(e)=>{this.setState({creditRating:e})}}>
  1559. {
  1560. slcRedit.map(function (item) {
  1561. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1562. })
  1563. }
  1564. </Select>
  1565. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1566. </FormItem>
  1567. <div className='clearfix'>
  1568. <FormItem
  1569. labelCol={{ span:4 }}
  1570. wrapperCol={{ span: 19 }}
  1571. label="企业核心技术" >
  1572. <Input type="textarea" rows={3} value={this.state.coreTechnology} style={{width:'96%'}}
  1573. onChange={(e,pre) => { this.setState({ coreTechnology: e.target.value })}}/>
  1574. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1575. </FormItem>
  1576. </div>
  1577. <div className='clearfix'>
  1578. <FormItem
  1579. labelCol={{ span:4 }}
  1580. wrapperCol={{ span: 19 }}
  1581. label="企业资质情况" >
  1582. <Input type="textarea" rows={3} value={this.state.qualification} placeholder="请按如下格式填写:资质名称+获得时间+拥有人+发证机构"
  1583. onChange={(e,pre) => { this.setState({ qualification: e.target.value })}} style={{width:'96%'}}/>
  1584. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1585. </FormItem>
  1586. </div>
  1587. <div className='clearfix'>
  1588. <FormItem
  1589. labelCol={{ span:4 }}
  1590. wrapperCol={{ span: 19 }}
  1591. label="高企合作情况" >
  1592. <Input type="textarea" rows={3} value={this.state.cooperationSituation}
  1593. onChange={(e,pre) => { this.setState({ cooperationSituation: e.target.value })}} style={{width:'96%'}}/>
  1594. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1595. </FormItem>
  1596. </div>
  1597. <div className='clearfix' >
  1598. <FormItem
  1599. labelCol={{ span:4 }}
  1600. wrapperCol={{ span: 19 }}
  1601. label="项目申请书" >
  1602. <Upload style={{display:"inlineBlock"}}
  1603. name="avatar"
  1604. action={globalConfig.context + "/api/admin/customer/upload"}
  1605. data={{
  1606. 'uid': this.state.detailId,
  1607. 'sign': 'organization_application'
  1608. }}
  1609. beforeUpload={beforeUploadFile}
  1610. fileList={this.state.fileList}
  1611. onChange={(info) => {
  1612. if (info.file.status !== 'uploading') {
  1613. }
  1614. if (info.file.status === 'done') {
  1615. if (!info.file.response.error.length) {
  1616. let isPDF=this.state.fileList[0].originFileObj.name.split('.');
  1617. let isIndex=isPDF.length-1;
  1618. if(isPDF[isIndex]=="pdf"){
  1619. message.success(`${info.file.name} 文件上传成功!`);
  1620. }else{
  1621. message.success("请上传pdf文件!");
  1622. }
  1623. } else {
  1624. message.warning(info.file.response.error[0].message);
  1625. return;
  1626. };
  1627. this.setState({
  1628. pojectApplicationUrl:info.file.response.data,
  1629. isXian:1,
  1630. })
  1631. } else if (info.file.status === 'error') {
  1632. message.error(`${info.file.name} 文件上传失败。`);
  1633. }
  1634. this.setState({ fileList: info.fileList.slice(-1) });
  1635. }}
  1636. >
  1637. {/*<a onClick={
  1638. () => {var newTab = window.open('about:blank'); getPreviews(this.state.uid, 'techProject', 'organization_application', function (data) { newTab.location.href = data; });
  1639. }}><Icon style={{ fontSize: '16px' }} type="eye-o" /> </a>*/}
  1640. <Button><Icon type="upload" /> 项目材料上传 </Button>
  1641. </Upload>
  1642. <span style={{ marginTop: '10px' ,marginLeft:"20px"}}>{this.state.pojectApplicationUrl ?
  1643. <span className="download-file">
  1644. <a onClick={this.visitOk1}><Icon style={{ fontSize: '16px' }} type="eye-o" /> </a>
  1645. </span>
  1646. : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}
  1647. </span>
  1648. </FormItem>
  1649. </div>
  1650. </div>
  1651. <Button className="setSubmit" type="primary" htmlType="submit">保存</Button>
  1652. <Button type="ghost" onClick={this.visitCancel}>取消</Button>
  1653. </div>
  1654. </Spin>
  1655. </Form>
  1656. </div>
  1657. </TabPane>
  1658. <TabPane tab="知识产权列表" key="1">
  1659. <Button type="primary" className="addButton" onClick={this.addClick}>发布成果<Icon type="plus" /></Button>
  1660. <Spin spinning={this.state.loading}>
  1661. <Table columns={this.state.columnsDate}
  1662. dataSource={this.state.dataSourceDate}
  1663. rowSelection={rowSelection}
  1664. pagination={this.state.paginationDate}
  1665. onRowClick={this.tableRowClickDate} />
  1666. </Spin>
  1667. </TabPane>
  1668. <TabPane tab="财务信息" key="2">
  1669. <Button type="primary" className="addButton" onClick={this.addClickc}>添加年度财务信息<Icon type="plus" /></Button>
  1670. <Spin spinning={this.state.loading}>
  1671. <Table columns={this.state.columnsc}
  1672. dataSource={this.state.dataSourcec}
  1673. rowSelection={rowSelection}
  1674. onRowClick={this.tableRowClickDatec} />
  1675. </Spin>
  1676. </TabPane>
  1677. <TabPane tab="项目信息" key="3">
  1678. <Button type="primary" className="addButton" onClick={this.addClickx}>添加项目信息<Icon type="plus" /></Button>
  1679. <Spin spinning={this.state.loading}>
  1680. <Table columns={this.state.columnsx}
  1681. dataSource={this.state.dataSourcex}
  1682. rowSelection={rowSelection}
  1683. onRowClick={this.tableRowClickDatex} />
  1684. </Spin>
  1685. </TabPane>
  1686. </Tabs>
  1687. </Modal>
  1688. <Modal
  1689. className="customeDetails"
  1690. footer=''
  1691. title="项目申请书"
  1692. width='800px'
  1693. visible={this.state.visitModul1}
  1694. onOk={this.visitOk1}
  1695. onCancel={this.visitCancel1}
  1696. >
  1697. <div>
  1698. {/*<Button type="primary" onClick={this.pdfShows(pdfUrl)}>点击查看</Button>
  1699. <div id="pdfContent" style={{height:"500px",width:"500px",marginLeft:"300px"}} >
  1700. </div>
  1701. onDocumentLoad={this.onDocumentComplete}
  1702. onLoadSuccess={this.onDocumentComplete}
  1703. onDocumentComplete={this.onDocumentComplete}
  1704. onPageRender={this.onPageComplete}
  1705. // "http://s.jishutao.com/upload/achievement/achievement/34576808907162737_achievement_maturity_text_file.pdf"//{pdfUrl}
  1706. */}
  1707. <PDF
  1708. file={pdfUrl}
  1709. onDocumentLoad={this.onDocumentComplete}
  1710. pageIndex={parseInt(this.state.pagec)}
  1711. scale={1.2}
  1712. />
  1713. {paginationss}
  1714. </div>
  1715. </Modal>
  1716. <Modal
  1717. className="customeDetails"
  1718. footer=''
  1719. title="财务资料"
  1720. width='500px'
  1721. visible={this.state.visitModulc}
  1722. onOk={this.visitOkc}
  1723. onCancel={this.visitCancelc}
  1724. > <Form layout="horizontal" onSubmit={this.newSubmitc} id="demand-form">
  1725. <Spin spinning={this.state.loading}>
  1726. <div className="clearfix" >
  1727. <FormItem
  1728. {...formItemLayoutc}
  1729. label="年份"
  1730. >
  1731. <Select placeholder="年份" value={this.state.year} style={{width:'90%'}}
  1732. onChange={(e)=>{this.setState({year:e})}}>
  1733. {
  1734. year.map(function (item) {
  1735. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1736. })
  1737. }
  1738. </Select>
  1739. </FormItem>
  1740. </div>
  1741. <div className="clearfix" >
  1742. <FormItem
  1743. {...formItemLayoutc}
  1744. label="销售额"
  1745. >
  1746. <Input placeholder="销售额" style={{width:'90%'}} value={this.state.salesAmount} onChange={(e) => {
  1747. this.setState({ salesAmount: e.target.value }) }} />万
  1748. </FormItem>
  1749. </div>
  1750. <div className="clearfix" >
  1751. <FormItem
  1752. {...formItemLayoutc}
  1753. label="总资产"
  1754. >
  1755. <Input placeholder="总资产" style={{width:'90%'}} value={this.state.assets} onChange={(e) => {
  1756. this.setState({ assets: e.target.value }) }} />万
  1757. </FormItem>
  1758. </div>
  1759. <div className="clearfix" >
  1760. <FormItem
  1761. {...formItemLayoutc}
  1762. label="研发费用"
  1763. >
  1764. <Input placeholder="研发费用" style={{width:'90%'}} value={this.state.researchAmount} onChange={(e) => {
  1765. this.setState({ researchAmount: e.target.value }) }} />万
  1766. </FormItem>
  1767. </div>
  1768. <Button className="setSubmit" type="primary" htmlType="submit" style={{marginLeft:"100px"}}>保存</Button>
  1769. <Button type="ghost" onClick={this.visitCancelc}>取消</Button>
  1770. </Spin>
  1771. </Form>
  1772. </Modal>
  1773. <Modal
  1774. className="customeDetails"
  1775. footer=''
  1776. title="项目资料"
  1777. width='500px'
  1778. visible={this.state.visitModulx}
  1779. onOk={this.visitOkc}
  1780. onCancel={this.visitCancelc}
  1781. > <Form layout="horizontal" onSubmit={this.newSubmitx} id="demand-form">
  1782. <Spin spinning={this.state.loading}>
  1783. <div className="clearfix" >
  1784. <FormItem
  1785. {...formItemLayoutc}
  1786. label="年份"
  1787. >
  1788. <Select placeholder="年份" value={this.state.year} style={{width:'90%'}}
  1789. onChange={(e)=>{this.setState({year:e})}}>
  1790. {
  1791. year.map(function (item) {
  1792. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1793. })
  1794. }
  1795. </Select>
  1796. </FormItem>
  1797. </div>
  1798. <div className="clearfix" >
  1799. <FormItem
  1800. {...formItemLayoutc}
  1801. label="项目名称"
  1802. >
  1803. <Input placeholder="项目名称" style={{width:'90%'}} value={this.state.projectName} onChange={(e) => {
  1804. this.setState({ projectName: e.target.value }) }} />
  1805. </FormItem>
  1806. </div>
  1807. <div className="clearfix" >
  1808. <FormItem
  1809. {...formItemLayoutc}
  1810. label="项目状态"
  1811. >
  1812. <Select placeholder="项目状态" value={this.state.status} style={{width:'90%'}}
  1813. onChange={(e)=>{this.setState({status:e})}}>
  1814. {
  1815. xiangmoState.map(function (item) {
  1816. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1817. })
  1818. }
  1819. </Select>
  1820. </FormItem>
  1821. </div>
  1822. <div className="clearfix" >
  1823. <FormItem
  1824. {...formItemLayoutc}
  1825. label="备注"
  1826. >
  1827. <Input type="textarea" rows={3} placeholder="备注" style={{width:'90%'}} value={this.state.remark} onChange={(e) => {
  1828. this.setState({ remark: e.target.value }) }} />
  1829. </FormItem>
  1830. </div>
  1831. <Button className="setSubmit" type="primary" htmlType="submit" style={{marginLeft:"100px"}}>保存</Button>
  1832. <Button type="ghost" onClick={this.visitCancelc}>取消</Button>
  1833. </Spin>
  1834. </Form>
  1835. </Modal>
  1836. <TechAchievementDesc
  1837. data={this.state.RowData}
  1838. detailApiUrl={this.props['data-detailApiUrl']}
  1839. achievementCategoryOption={this.state.achievementCategoryOption}
  1840. showDesc={this.state.showDesc}
  1841. uid={this.state.uid}
  1842. closeDesc={this.closeDesc}
  1843. loadDatas={this.loadDatas}
  1844. />
  1845. </div >
  1846. );
  1847. }
  1848. }));
  1849. export default IntentionCustomer;