crm.jsx 73 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920
  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.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. yearSalesAmount:this.state.yearSalesAmount,//年度销售额
  738. lastYearResearchAmount:this.state.lastYearResearchAmount,//上年度研发费用
  739. assets:this.state.assets,//总资产
  740. qualification:this.state.qualification,//企业资质情况
  741. cooperationSituation:this.state.cooperationSituation,//企业与高校院所
  742. informationMaintainer:this.state.informationMaintainer,//资料维护人
  743. informationMaintainerName:this.state.informationMaintainerName,//资料维护人
  744. coreTechnology:this.state.coreTechnology,//核心技术
  745. accomplishSituation:this.state.accomplishSituation,//客户已完成项目情况
  746. creditRating:this.state.creditRating,//信用等级
  747. pojectApplicationUrl:this.state.pojectApplicationUrl,//文件地址
  748. }
  749. }).done(function(data) {
  750. this.setState({
  751. loading: false
  752. });
  753. if(!data.error.length) {
  754. message.success('保存成功!');
  755. this.visitCancel();
  756. this.loadData(this.state.pageNo);
  757. } else {
  758. message.warning(data.error[0].message);
  759. }
  760. }.bind(this));
  761. },
  762. //财务信息提交
  763. newSubmitc(e) {
  764. e.preventDefault();
  765. if(!this.state.year) {
  766. message.warning('请选择年份');
  767. return false;
  768. };
  769. this.setState({
  770. loading: true
  771. });
  772. $.ajax({
  773. method: "post",
  774. dataType: "json",
  775. url: globalConfig.context + this.state.isXin==1?'/api/admin/customers/addOrgAnnual':'/api/admin/customers/updateOrgAnnual',
  776. data: {
  777. id:this.state.id?this.state.id:undefined,//年报ID
  778. uid:this.state.uid,//客户ID
  779. year:this.state.year,//年份
  780. researchAmount:this.state.researchAmount,//研发费用
  781. assets:this.state.assets,//总资产
  782. salesAmount:this.state.salesAmount,//销售额
  783. }
  784. }).done(function(data) {
  785. this.setState({
  786. loading: false
  787. });
  788. if(!data.error.length) {
  789. message.success('保存成功!');
  790. this.visitCancelc();
  791. this.loadDatac();
  792. } else {
  793. message.warning(data.error[0].message);
  794. }
  795. }.bind(this));
  796. },
  797. //财务信息提交
  798. newSubmitx(e) {
  799. e.preventDefault();
  800. if(!this.state.year) {
  801. message.warning('请选择年份');
  802. return false;
  803. };
  804. this.setState({
  805. loading: true
  806. });
  807. $.ajax({
  808. method: "post",
  809. dataType: "json",
  810. url: globalConfig.context + this.state.isXinx==1?'/api/admin/customers/addOrgYearProject':'/api/admin/customers/updateOrgYearProject',
  811. data: {
  812. id:this.state.id?this.state.id:undefined,//年报ID
  813. uid:this.state.uid,//客户ID
  814. year:this.state.year,//年份
  815. projectName:this.state.projectName,//研发费用
  816. status:this.state.status,//总资产
  817. remark:this.state.remark,//销售额
  818. }
  819. }).done(function(data) {
  820. this.setState({
  821. loading: false
  822. });
  823. if(!data.error.length) {
  824. message.success('保存成功!');
  825. this.visitCancelc();
  826. this.loadDatax();
  827. } else {
  828. message.warning(data.error[0].message);
  829. }
  830. }.bind(this));
  831. },
  832. //获取ID
  833. getStateData(id) {
  834. this.setState({
  835. loading: true
  836. });
  837. $.ajax({
  838. method: "post",
  839. dataType: "json",
  840. crossDomain: false,
  841. url: globalConfig.context + "/api/admin/techproject/techProjectLog",
  842. data: {
  843. pid: id || this.props.data.id
  844. },
  845. success: function (data) {
  846. if (!data.data) {
  847. if (data.error && data.error.length) {
  848. message.warning(data.error[0].message);
  849. };
  850. return;
  851. };
  852. var myDate = new Date();
  853. this.state.stateTable = [];
  854. for (let i = 0; i < data.data.length; i++) {
  855. this.state.stateTable.push({
  856. key: i,
  857. state: data.data[i].state,
  858. recordTime: data.data[i].recordTime,
  859. recordTimeFormattedDate: data.data[i].recordTimeFormattedDate,
  860. principal: data.data[i].principal,
  861. operator: data.data[i].operator,
  862. comment: data.data[i].comment
  863. });
  864. };
  865. }.bind(this),
  866. }).always(function () {
  867. this.setState({
  868. loading: false
  869. });
  870. }.bind(this));
  871. },
  872. //整行点击
  873. tableRowClick(record, index) {
  874. this.state.visitModul=true;
  875. this.state.pojectApplicationUrl = undefined;
  876. this.state.isXian=0;
  877. this.details(record.id);
  878. },
  879. //指定转交人自动补全
  880. supervisor(e){
  881. $.ajax({
  882. method: "get",
  883. dataType: "json",
  884. crossDomain: false,
  885. url: globalConfig.context + "/api/admin/customer/listAdminByName",
  886. data:{
  887. adminName:e
  888. },
  889. success: function (data) {
  890. let thedata=data.data;
  891. if (!thedata) {
  892. if (data.error && data.error.length) {
  893. message.warning(data.error[0].message);
  894. };
  895. thedata = {};
  896. };
  897. this.setState({
  898. customerArr:thedata,
  899. });
  900. }.bind(this),
  901. }).always(function () {
  902. this.setState({
  903. loading: false
  904. });
  905. }.bind(this));
  906. },
  907. //输入转交人输入框失去焦点是判断客户是否存在
  908. selectAuto(value,options){
  909. this.setState({
  910. auto:value
  911. })
  912. },
  913. blurChange(e){
  914. let theType='';
  915. let contactLists=this.state.customerArr||[];
  916. if (e) {
  917. contactLists.map(function (item) {
  918. if (item.name == e.toString()) {
  919. theType = item.id;
  920. }
  921. });
  922. }
  923. this.setState({
  924. theTypes:theType
  925. })
  926. },
  927. //值改变时请求客户名称
  928. httpChange(e){
  929. if(e.length>=1){
  930. this.supervisor(e);
  931. }
  932. this.setState({
  933. auto:e
  934. })
  935. },
  936. //转交
  937. changeAssigner() {
  938. if(this.state.theTypes){
  939. this.setState({
  940. selectedRowKeys: [],
  941. });
  942. let id;
  943. for(let idx = 0; idx < this.state.selectedRows.length; idx++) {
  944. let rowItem = this.state.selectedRows[idx];
  945. if(rowItem.id) {
  946. id=rowItem.id;
  947. };
  948. };
  949. $.ajax({
  950. method: "post",
  951. dataType: "json",
  952. crossDomain: false,
  953. url: globalConfig.context + "/api/admin/customer/updateInformationMaintainerr",
  954. data: {
  955. id: id, //客户ID
  956. aid: this.state.theTypes, //指定转交人的ID
  957. }
  958. }).done(function(data) {
  959. if(!data.error.length) {
  960. message.success('转交成功!');
  961. this.setState({
  962. auto:'',
  963. loading: false,
  964. });
  965. } else {
  966. message.warning(data.error[0].message);
  967. };
  968. this.loadData(Math.min(this.state.pageNo==undefined?1:this.state.pageNo,Math.ceil((this.state.pagination.total-1)/10)));
  969. }.bind(this));
  970. }else{
  971. message.warning('请输入转交人姓名')
  972. }
  973. },
  974. //详情打开
  975. visitOk(e) {
  976. this.setState({
  977. visitModul: false
  978. });
  979. },
  980. //详情关闭
  981. visitCancel(e) {
  982. this.state.fileList = [];
  983. this.setState({
  984. visitModul: false,
  985. callnub:"0"
  986. });
  987. },
  988. //新增年报打开
  989. visitOkc(e) {
  990. this.setState({
  991. visitModulc: true,
  992. visitModulx: true
  993. });
  994. },
  995. //新增年报关闭
  996. visitCancelc(e) {
  997. this.resetc();
  998. this.resetx();
  999. this.setState({
  1000. visitModulc: false,
  1001. visitModulx: false,
  1002. });
  1003. },
  1004. //PDF打开
  1005. visitOk1(e) {
  1006. this.getPrevie(this.state.uid, 'techProject', 'organization_application');
  1007. this.setState({
  1008. visitModul1: true
  1009. });
  1010. },
  1011. //PDF关闭
  1012. visitCancel1(e) {
  1013. this.setState({
  1014. visitModul1: false,
  1015. loading:false,
  1016. });
  1017. },
  1018. //获取PDF地址
  1019. getPrevie(id,url,sign){
  1020. $.ajax({
  1021. method: "get",
  1022. dataType: "json",
  1023. crossDomain: false,
  1024. url: globalConfig.context + "/api/admin/customer/" + url,
  1025. data:{
  1026. "id": id,
  1027. "sign": sign
  1028. },
  1029. success: function (data) {
  1030. if (!data.data) {
  1031. if ( data.error && data.error.length ) {
  1032. message.warning(data.error[0].message);
  1033. };
  1034. };
  1035. this.setState({
  1036. pdfUrl: location.origin + globalConfig.context + "/open/preview?" + data.data,
  1037. });
  1038. }.bind(this)
  1039. });
  1040. },
  1041. //PDF分页
  1042. //一开始就加载这个函数
  1043. onDocumentComplete (pages) {
  1044. this.setState({
  1045. loading: true,
  1046. });
  1047. this.setState({ pagec:0, pages:pages.total });
  1048. },
  1049. //随后
  1050. onPageComplete (pagec) {
  1051. this.setState({ pagec });
  1052. },
  1053. handlePrevious (){
  1054. this.setState({ pagec: this.state.pagec - 1 });
  1055. },
  1056. handleNext (){
  1057. this.setState({ pagec: this.state.pagec + 1 });
  1058. },
  1059. renderPagination (pagec,pages) {
  1060. let previousButton = <li className="previous" onClick={this.handlePrevious}><a href="#"><span className="fa fa-arrow-left">上一页</span> </a></li>;
  1061. if (pagec==0) {
  1062. previousButton = <li className="previous disabled"><a href="#"><span className="fa fa-arrow-left">上一页</span> </a></li>;
  1063. }
  1064. let nextButton = <li className="next" onClick={this.handleNext}><a href="#"> <span className="fa fa-arrow-right">下一页</span></a></li>;
  1065. if (pagec==pages) {
  1066. nextButton = <li className="next disabled"><a href="#"> <span className="fa fa-arrow-right">下一页</span></a></li>;
  1067. }
  1068. return (
  1069. <nav>
  1070. <ul className="pager">
  1071. {previousButton}
  1072. {nextButton}
  1073. </ul>
  1074. </nav>
  1075. );
  1076. },
  1077. //上面是做PDF分页的
  1078. getOrgCodeUrl(e) {
  1079. this.setState({ orgCodeUrl: e });
  1080. },
  1081. getCompanyLogoUrl(e) {
  1082. this.setState({ companyLogoUrl: e });
  1083. },
  1084. componentWillReceiveProps(nextProps) {
  1085. if(nextProps.ApiUrl!=this.props.ApiUrl) {
  1086. this.state.nameSearch = '';
  1087. this.state.addressSearch = [];
  1088. this.state.provinceSearch = undefined;
  1089. this.state.citySearch = undefined;
  1090. this.state.releaseDate[0] = undefined;
  1091. this.state.releaseDate[1] = undefined;
  1092. this.loadData(null,nextProps.ApiUrl);
  1093. };
  1094. },
  1095. callback(e) {
  1096. if(e == '0') {
  1097. this.setState({
  1098. callnub: e,
  1099. })
  1100. }
  1101. if(e == '1') {
  1102. this.setState({
  1103. callnub: e,
  1104. })
  1105. this.loadDatas();
  1106. }
  1107. if(e == '2') {
  1108. this.setState({
  1109. callnub: e,
  1110. })
  1111. this.loadDatac();
  1112. }
  1113. if(e == '3') {
  1114. this.setState({
  1115. callnub: e,
  1116. })
  1117. this.loadDatax();
  1118. }
  1119. },
  1120. //发布成果
  1121. addClick() {
  1122. this.state.RowData = {};
  1123. this.setState({
  1124. showDesc: true,
  1125. });
  1126. },
  1127. //新增财务信息
  1128. addClickc() {
  1129. this.state.RowData = {};
  1130. this.resetc();
  1131. this.setState({
  1132. visitModulc: true,
  1133. isXin:1,
  1134. });
  1135. },
  1136. //新增项目信息
  1137. addClickx() {
  1138. this.state.RowData = {};
  1139. this.resetx();
  1140. this.setState({
  1141. visitModulx: true,
  1142. isXinx:1,
  1143. });
  1144. },
  1145. //关闭发布成果
  1146. closeDesc(e, s) {
  1147. this.state.showDesc = e;
  1148. if (s) {
  1149. this.loadDatas();
  1150. };
  1151. },
  1152. //客户资料每行点击
  1153. tableRowClickDate(record, index) {
  1154. this.state.RowData = record;
  1155. if(index!=undefined){
  1156. this.setState({
  1157. showDesc: true
  1158. });
  1159. }
  1160. },
  1161. //年度每行点击
  1162. tableRowClickDatec(record, index) {
  1163. this.state.RowData = record;
  1164. if(index!=undefined){
  1165. this.setState({
  1166. isXin:2,
  1167. visitModulc: true,
  1168. year:record.year.toString(),//年份
  1169. id:record.id,//年报详情ID
  1170. assets:record.assets,//总资产
  1171. researchAmount:record.researchAmount,//研发费用
  1172. salesAmount:record.salesAmount,//销售额
  1173. });
  1174. }
  1175. },
  1176. //项目每行点击
  1177. tableRowClickDatex(record, index) {
  1178. this.state.RowData = record;
  1179. if(index!=undefined){
  1180. this.setState({
  1181. isXinx:2,
  1182. visitModulx: true,
  1183. year:record.year.toString(),//年份
  1184. id:record.id,//年报详情ID
  1185. projectName:record.projectName,//项目名称
  1186. status:record.status.toString(),//项目状态
  1187. remark:record.remark,//销售额
  1188. });
  1189. }
  1190. },
  1191. //删除财务信息
  1192. deltalc(record){
  1193. this.setState({
  1194. loading: true
  1195. });
  1196. $.ajax({
  1197. method: "post",
  1198. dataType: "json",
  1199. crossDomain: false,
  1200. url: globalConfig.context + '/api/admin/customers/delectOrgAnnual',
  1201. data: {
  1202. id:record.id
  1203. }
  1204. }).done(function (data) {
  1205. if (!data.error.length) {
  1206. message.success('操作成功');
  1207. this.setState({
  1208. loading: false,
  1209. });
  1210. this.loadDatac();
  1211. } else {
  1212. message.warning(data.error[0].message);
  1213. };
  1214. }.bind(this));
  1215. },
  1216. //删除财务信息
  1217. deltalx(record){
  1218. this.setState({
  1219. loading: true
  1220. });
  1221. $.ajax({
  1222. method: "post",
  1223. dataType: "json",
  1224. crossDomain: false,
  1225. url: globalConfig.context + '/api/admin/customers/delectOrgYearProject',
  1226. data: {
  1227. id:record.id
  1228. }
  1229. }).done(function (data) {
  1230. if (!data.error.length) {
  1231. message.success('操作成功');
  1232. this.setState({
  1233. loading: false,
  1234. });
  1235. this.loadDatax();
  1236. } else {
  1237. message.warning(data.error[0].message);
  1238. };
  1239. }.bind(this));
  1240. },
  1241. render() {
  1242. let paginationss = null;
  1243. if (this.state.pagec>=0) {
  1244. paginationss = this.renderPagination(this.state.pagec, this.state.pages);
  1245. }
  1246. const {
  1247. RangePicker,
  1248. MonthPicker
  1249. } = DatePicker;
  1250. const formItemLayout = {
  1251. labelCol: { span: 8 },
  1252. wrapperCol: { span: 14 },
  1253. };
  1254. const formItemLayoutc = {
  1255. labelCol: { span: 6 },
  1256. wrapperCol: { span: 14 },
  1257. };
  1258. const FormItem = Form.Item;
  1259. const rowSelection = {
  1260. selectedRowKeys: this.state.selectedRowKeys,
  1261. onChange: (selectedRowKeys, selectedRows) => {
  1262. this.setState({
  1263. modalVisible:false,
  1264. selectedRows: selectedRows.slice(-1),
  1265. selectedRowKeys: selectedRowKeys.slice(-1)
  1266. });
  1267. },
  1268. onSelect: (recordt, selected, selectedRows) => {
  1269. this.setState({
  1270. modalVisible:false,
  1271. recordt: recordt.id
  1272. })
  1273. },
  1274. };
  1275. const hasSelected = this.state.selectedRowKeys.length > 0;
  1276. const dataSources=this.state.customerArr || [];
  1277. const options = dataSources.map((group) =>
  1278. <Select.Option key={group.id} value={group.name}>{group.name}</Select.Option>
  1279. )
  1280. const intentionState = this.props.intentionState ||'';
  1281. const props = {
  1282. name: 'file',
  1283. multiple: true,
  1284. action: '/api/admin/techproject/upload',
  1285. onChange(info) {
  1286. const status = info.file.status;
  1287. if (status !== 'uploading') {
  1288. }
  1289. if (status === 'done') {
  1290. message.success(`${info.file.name} file uploaded successfully.`);
  1291. } else if (status === 'error') {
  1292. message.error(`${info.file.name} file upload failed.`);
  1293. }
  1294. },
  1295. };
  1296. let pdfUrl =this.state.pdfUrl||'';
  1297. return(
  1298. <div className="user-content" >
  1299. <div className="content-title">
  1300. <span>客户资料维护</span>
  1301. </div>
  1302. <div className="user-search">
  1303. <Input placeholder="客户名称"
  1304. value={this.state.nameSearch}
  1305. onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />
  1306. <Select placeholder="省"
  1307. style={{ width: 80 }}
  1308. value={this.state.provinceSearch}
  1309. onChange={(e) => {this.setState({ provinceSearch: e});}}>
  1310. {this.state.Provinces}
  1311. </Select>
  1312. <span style={{marginRight:'10px'}}>
  1313. <Cascader options={citySelect()} value={this.state.addressSearch} placeholder="选择城市"
  1314. onChange={(e,pre) => { this.setState({ addressSearch: e }) }} />
  1315. </span>
  1316. <Select placeholder="选择资料质量" style={{ width: 120 }}
  1317. value={this.state.dataGrade}
  1318. onChange={(e) => { this.setState({ dataGrade: e }) }}>
  1319. <Select.Option value="0" >有效资料</Select.Option>
  1320. <Select.Option value="1" >优质资料</Select.Option>
  1321. </Select>
  1322. <Select placeholder="是否面谈客户" style={{ width: 120 }}
  1323. value={this.state.follow}
  1324. onChange={(e) => { this.setState({ follow: e }) }}>
  1325. <Select.Option value="0" >否</Select.Option>
  1326. <Select.Option value="1" >是</Select.Option>
  1327. </Select>
  1328. <RangePicker style={{marginRight:'10px'}}
  1329. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  1330. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  1331. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  1332. <Button type="primary" onClick={this.search}>搜索</Button>
  1333. <Button onClick={this.reset}>重置</Button>
  1334. <AutoComplete
  1335. className="certain-category-search"
  1336. dropdownClassName="certain-category-search-dropdown"
  1337. dropdownMatchSelectWidth={false}
  1338. dropdownStyle={{ width: 120 }}
  1339. style={{ width: '120px'}}
  1340. dataSource={options}
  1341. placeholder="输入转交人姓名"
  1342. value={this.state.auto}
  1343. onChange={this.httpChange}
  1344. filterOption={true}
  1345. onBlur={this.blurChange}
  1346. onSelect={this.selectAuto}
  1347. disabled={!hasSelected}
  1348. >
  1349. <Input />
  1350. </AutoComplete>
  1351. <Button type="primary" onClick={this.changeAssigner} disabled={!hasSelected} >转交</Button>
  1352. </div>
  1353. <div className="patent-table">
  1354. <Spin spinning={this.state.loading}>
  1355. <Table columns={this.state.columns}
  1356. dataSource={this.state.dataSource}
  1357. rowSelection={rowSelection}
  1358. pagination={this.state.pagination}
  1359. onRowClick={this.tableRowClick}
  1360. />
  1361. </Spin>
  1362. </div>
  1363. <Modal
  1364. className="customeDetails"
  1365. footer=''
  1366. title="客户资料"
  1367. width='1000px'
  1368. visible={this.state.visitModul}
  1369. onOk={this.visitOk}
  1370. onCancel={this.visitCancel}
  1371. >
  1372. <Tabs onChange={this.callback} activeKey={this.state.callnub}>
  1373. <TabPane tab="基本信息" key="0">
  1374. <div>
  1375. <Form layout="horizontal" onSubmit={this.newSubmit} id="demand-form">
  1376. <Spin spinning={this.state.loading}>
  1377. <div style={{fontSize:'18px',marginLeft:'50px',marginTop:'15px',marginBottom:'10px',color:"red",fontWeight:"bold"}}>基本信息</div>
  1378. <div className="clearfix" >
  1379. <FormItem className="half-item"
  1380. {...formItemLayout}
  1381. label="客户姓名"
  1382. >
  1383. <span>{this.state.identifyName}</span>
  1384. </FormItem>
  1385. <FormItem className="half-item"
  1386. {...formItemLayout}
  1387. label="资料所属人"
  1388. >
  1389. <span>{this.state.informationMaintainerName}</span>
  1390. </FormItem>
  1391. </div>
  1392. <div className="clearfix" >
  1393. <FormItem className="half-item"
  1394. {...formItemLayout}
  1395. label="企业行业">
  1396. <Select placeholder="选择行业" value={this.state.industry} style={{width:'95%'}}
  1397. onChange={(e)=>{this.setState({industry:e})}}>
  1398. {
  1399. industry.map(function (item) {
  1400. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1401. })
  1402. }
  1403. </Select>
  1404. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1405. </FormItem>
  1406. <FormItem className="half-item"
  1407. {...formItemLayout}
  1408. label="社会属性"
  1409. >
  1410. <Select placeholder="客户社会属性" value={this.state.societyTag} style={{width:'95%'}}
  1411. onChange={(e)=>{this.setState({societyTag:e})}}>
  1412. {
  1413. socialAttribute.map(function (item) {
  1414. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1415. })
  1416. }
  1417. </Select>
  1418. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1419. </FormItem>
  1420. <FormItem className="half-item"
  1421. {...formItemLayout}
  1422. label="省-市-区"
  1423. >
  1424. <Cascader options={areaSelect()} value={this.state.ProvinceCity} placeholder="选择城市" style={{width:'95%'}}
  1425. onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} />
  1426. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1427. </FormItem>
  1428. <FormItem className="half-item"
  1429. {...formItemLayout}
  1430. label="注册资本"
  1431. >
  1432. <Input placeholder="注册资本" style={{width:'90%'}} value={this.state.registeredCapital} onChange={(e) => {
  1433. this.setState({ registeredCapital: e.target.value }) }} />万
  1434. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1435. </FormItem>
  1436. <div className='clearfix'>
  1437. <FormItem
  1438. labelCol={{ span:4 }}
  1439. wrapperCol={{ span: 20 }}
  1440. label="主营产品" >
  1441. <Input type="textarea" rows={2} value={this.state.businessScope} style={{width:'95%'}}
  1442. onChange={(e,pre) => { this.setState({ businessScope: e.target.value })}}/>
  1443. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1444. </FormItem>
  1445. </div>
  1446. <div style={{fontSize:'18px',marginLeft:'50px',marginTop:'15px',marginBottom:'10px',color:"red",fontWeight:"bold"}}>企业资料</div>
  1447. <FormItem className="half-item"
  1448. {...formItemLayout}
  1449. label="通信地址"
  1450. >
  1451. <Input placeholder="客户通信地址" value={this.state.postalAddress}
  1452. onChange={(e,pre) => { this.setState({ postalAddress: e.target.value }) }}/>
  1453. </FormItem>
  1454. <FormItem className="half-item"
  1455. {...formItemLayout}
  1456. label="固定电话"
  1457. >
  1458. <Input placeholder="客户固定电话" value={this.state.contactsFixedTel}
  1459. onChange={(e) => { this.setState({ contactsFixedTel: e.target.value }) }}/>
  1460. </FormItem>
  1461. <FormItem className="half-item"
  1462. {...formItemLayout}
  1463. label="客户传真"
  1464. >
  1465. <Input placeholder="客户传真" value={this.state.contactsFax}
  1466. onChange={(e) => { this.setState({ contactsFax: e.target.value })}}/>
  1467. </FormItem>
  1468. <FormItem className="half-item"
  1469. {...formItemLayout}
  1470. label="企业人数"
  1471. >
  1472. <Input placeholder="单位规模" value={this.state.enterpriseScale} onChange={(e) => {
  1473. this.setState({ enterpriseScale: e.target.value })}}/>
  1474. </FormItem>
  1475. <FormItem className="half-item"
  1476. {...formItemLayout}
  1477. label="法人名称"
  1478. >
  1479. <Input placeholder="法人名称" value={this.state.legalPerson} onChange={(e) => {
  1480. this.setState({ legalPerson: e.target.value })}}/>
  1481. </FormItem>
  1482. <FormItem className="half-item"
  1483. {...formItemLayout}
  1484. label="法人身份证"
  1485. >
  1486. <Input placeholder="法人身份证" value={this.state.legalPersonIdCard} onChange={(e) => {
  1487. this.setState({ legalPersonIdCard: e.target.value })}}/>
  1488. </FormItem>
  1489. <FormItem className="half-item"
  1490. {...formItemLayout}
  1491. label="联系人"
  1492. >
  1493. <Input placeholder="联系人名称" value={this.state.contacts} onChange={(e) => {
  1494. this.setState({ contacts: e.target.value })}}/>
  1495. </FormItem>
  1496. <FormItem className="half-item"
  1497. {...formItemLayout}
  1498. label="联系人号码"
  1499. >
  1500. <Input placeholder="联系人号码" value={this.state.contactMobile} onChange={(e) => {
  1501. this.setState({ contactMobile: e.target.value })}}/>
  1502. </FormItem>
  1503. <FormItem className="half-item"
  1504. {...formItemLayout}
  1505. label="法人电话"
  1506. >
  1507. <Input placeholder="法人电话" value={this.state.legalPersonTel} onChange={(e) => {
  1508. this.setState({ legalPersonTel: e.target.value })}}/>
  1509. </FormItem>
  1510. <FormItem className="half-item"
  1511. {...formItemLayout}
  1512. label="法人邮箱"
  1513. >
  1514. <Input placeholder="法人电子邮箱" value={this.state.legalPersonEmail}
  1515. onChange={(e) => {this.setState({legalPersonEmail: e.target.value })}}/>
  1516. </FormItem>
  1517. <FormItem className="half-item"
  1518. {...formItemLayout}
  1519. label="社会统一信用机构代码"
  1520. >
  1521. <Input placeholder="社会统一信用机构代码" value={this.state.orgCode} onChange={(e) => {
  1522. this.setState({ orgCode: e.target.value })}}/>
  1523. </FormItem>
  1524. <div className='clearfix'>
  1525. <FormItem
  1526. labelCol={{ span:4 }}
  1527. wrapperCol={{ span: 18 }}
  1528. label="客户简介" >
  1529. <Input type="textarea" rows={3} value={this.state.introduction}
  1530. onChange={(e,pre) => { this.setState({ introduction: e.target.value })}}/>
  1531. </FormItem>
  1532. </div>
  1533. <div className="clearfix pictures">
  1534. <FormItem style={{display:'inline-block',width:'350px',marginTop:'20px',marginLeft:'95px'}}
  1535. labelCol={{ span: 8 }}
  1536. wrapperCol={{ span: 10 }}
  1537. label="机构证书(PIC)" >
  1538. <PicturesWall
  1539. fileList={this.getOrgCodeUrl}
  1540. pictureUrl={this.state.orgCodeUrl} />
  1541. <p>建议:图片要清晰。</p>
  1542. </FormItem>
  1543. <FormItem style={{display:'inline-block',width:'350px',marginTop:'20px',marginTop:'20px'}}
  1544. labelCol={{ span: 8 }}
  1545. wrapperCol={{ span: 10 }}
  1546. label="单位LOGO" >
  1547. <PicturesWall
  1548. fileList={this.getCompanyLogoUrl}
  1549. pictureUrl={this.state.companyLogoUrl} />
  1550. <p>建议:图片要清晰。</p>
  1551. </FormItem>
  1552. </div>
  1553. <div style={{fontSize:'18px',marginLeft:'50px',marginTop:'15px',marginBottom:'10px',color:"red",fontWeight:"bold"}}>重要资料</div>
  1554. <div className='clearfix' >
  1555. <FormItem className="half-item"
  1556. {...formItemLayout}
  1557. label="上年度销售额"
  1558. >
  1559. <Input ref='consul' placeholder="请输入上年度销售额" value={this.state.yearSalesAmount} style={{width:'90%'}}
  1560. onChange={(e) => {this.setState({yearSalesAmount: e.target.value })}}/>万
  1561. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1562. </FormItem>
  1563. <FormItem className="half-item"
  1564. {...formItemLayout}
  1565. label="上年度研发费用"
  1566. >
  1567. <Input ref='consul' placeholder="请输入上年度研发费用" value={this.state.lastYearResearchAmount} style={{width:'90%'}}
  1568. onChange={(e) => {this.setState({lastYearResearchAmount: e.target.value })}}/>万
  1569. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1570. </FormItem>
  1571. <FormItem className="half-item"
  1572. {...formItemLayout}
  1573. label="客户信用等级"
  1574. >
  1575. <Select placeholder="客户信用等级" value={this.state.creditRating} style={{width:'90%'}}
  1576. onChange={(e)=>{this.setState({creditRating:e})}}>
  1577. {
  1578. slcRedit.map(function (item) {
  1579. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1580. })
  1581. }
  1582. </Select>
  1583. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1584. </FormItem>
  1585. <FormItem className="half-item"
  1586. {...formItemLayout}
  1587. label="上年度总资产情况"
  1588. >
  1589. <Input ref='consul' placeholder="上年度总资产情况" value={this.state.assets} style={{width:'90%'}}
  1590. onChange={(e) => {this.setState({assets: e.target.value })}}/>万
  1591. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1592. </FormItem>
  1593. <div className='clearfix'>
  1594. <FormItem
  1595. labelCol={{ span:4 }}
  1596. wrapperCol={{ span: 19 }}
  1597. label="企业核心技术" >
  1598. <Input type="textarea" rows={3} value={this.state.coreTechnology} style={{width:'96%'}}
  1599. onChange={(e,pre) => { this.setState({ coreTechnology: e.target.value })}}/>
  1600. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1601. </FormItem>
  1602. </div>
  1603. <div className='clearfix'>
  1604. <FormItem
  1605. labelCol={{ span:4 }}
  1606. wrapperCol={{ span: 19 }}
  1607. label="企业资质情况" >
  1608. <Input type="textarea" rows={3} value={this.state.qualification} placeholder="请按如下格式填写:资质名称+获得时间+拥有人+发证机构"
  1609. onChange={(e,pre) => { this.setState({ qualification: e.target.value })}} style={{width:'96%'}}/>
  1610. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1611. </FormItem>
  1612. </div>
  1613. <div className='clearfix'>
  1614. <FormItem
  1615. labelCol={{ span:4 }}
  1616. wrapperCol={{ span: 19 }}
  1617. label="企业已做项目" >
  1618. <Input type="textarea" rows={3} value={this.state.accomplishSituation} placeholder="请按如下格式填写:项目类型+主管部门+申报时间+立项情况+验收情况"
  1619. onChange={(e,pre) => { this.setState({ accomplishSituation: e.target.value })}} style={{width:'96%'}}/>
  1620. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1621. </FormItem>
  1622. </div>
  1623. <div className='clearfix'>
  1624. <FormItem
  1625. labelCol={{ span:4 }}
  1626. wrapperCol={{ span: 19 }}
  1627. label="高企合作情况" >
  1628. <Input type="textarea" rows={3} value={this.state.cooperationSituation}
  1629. onChange={(e,pre) => { this.setState({ cooperationSituation: e.target.value })}} style={{width:'96%'}}/>
  1630. <span style={{color:'red',marginLeft:'5px'}}>*</span>
  1631. </FormItem>
  1632. </div>
  1633. <div className='clearfix' >
  1634. <FormItem
  1635. labelCol={{ span:4 }}
  1636. wrapperCol={{ span: 19 }}
  1637. label="项目申请书" >
  1638. <Upload style={{display:"inlineBlock"}}
  1639. name="avatar"
  1640. action={globalConfig.context + "/api/admin/customer/upload"}
  1641. data={{
  1642. 'uid': this.state.detailId,
  1643. 'sign': 'organization_application'
  1644. }}
  1645. beforeUpload={beforeUploadFile}
  1646. fileList={this.state.fileList}
  1647. onChange={(info) => {
  1648. if (info.file.status !== 'uploading') {
  1649. }
  1650. if (info.file.status === 'done') {
  1651. if (!info.file.response.error.length) {
  1652. let isPDF=this.state.fileList[0].originFileObj.name.split('.');
  1653. let isIndex=isPDF.length-1;
  1654. if(isPDF[isIndex]=="pdf"){
  1655. message.success(`${info.file.name} 文件上传成功!`);
  1656. }else{
  1657. message.success("请上传pdf文件!");
  1658. }
  1659. } else {
  1660. message.warning(info.file.response.error[0].message);
  1661. return;
  1662. };
  1663. this.setState({
  1664. pojectApplicationUrl:info.file.response.data,
  1665. isXian:1,
  1666. })
  1667. } else if (info.file.status === 'error') {
  1668. message.error(`${info.file.name} 文件上传失败。`);
  1669. }
  1670. this.setState({ fileList: info.fileList.slice(-1) });
  1671. }}
  1672. >
  1673. {/*<a onClick={
  1674. () => {var newTab = window.open('about:blank'); getPreviews(this.state.uid, 'techProject', 'organization_application', function (data) { newTab.location.href = data; });
  1675. }}><Icon style={{ fontSize: '16px' }} type="eye-o" /> </a>*/}
  1676. <Button><Icon type="upload" /> 项目材料上传 </Button>
  1677. </Upload>
  1678. <span style={{ marginTop: '10px' ,marginLeft:"20px"}}>{this.state.pojectApplicationUrl ?
  1679. <span className="download-file">
  1680. <a onClick={this.visitOk1}><Icon style={{ fontSize: '16px' }} type="eye-o" /> </a>
  1681. </span>
  1682. : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}
  1683. </span>
  1684. </FormItem>
  1685. </div>
  1686. </div>
  1687. <Button className="setSubmit" type="primary" htmlType="submit">保存</Button>
  1688. <Button type="ghost" onClick={this.visitCancel}>取消</Button>
  1689. </div>
  1690. </Spin>
  1691. </Form>
  1692. </div>
  1693. </TabPane>
  1694. <TabPane tab="知识产权列表" key="1">
  1695. <Button type="primary" className="addButton" onClick={this.addClick}>发布成果<Icon type="plus" /></Button>
  1696. <Spin spinning={this.state.loading}>
  1697. <Table columns={this.state.columnsDate}
  1698. dataSource={this.state.dataSourceDate}
  1699. rowSelection={rowSelection}
  1700. pagination={this.state.paginationDate}
  1701. onRowClick={this.tableRowClickDate} />
  1702. </Spin>
  1703. </TabPane>
  1704. <TabPane tab="财务信息" key="2">
  1705. <Button type="primary" className="addButton" onClick={this.addClickc}>添加年度财务信息<Icon type="plus" /></Button>
  1706. <Spin spinning={this.state.loading}>
  1707. <Table columns={this.state.columnsc}
  1708. dataSource={this.state.dataSourcec}
  1709. rowSelection={rowSelection}
  1710. onRowClick={this.tableRowClickDatec} />
  1711. </Spin>
  1712. </TabPane>
  1713. <TabPane tab="项目信息" key="3">
  1714. <Button type="primary" className="addButton" onClick={this.addClickx}>添加项目信息<Icon type="plus" /></Button>
  1715. <Spin spinning={this.state.loading}>
  1716. <Table columns={this.state.columnsx}
  1717. dataSource={this.state.dataSourcex}
  1718. rowSelection={rowSelection}
  1719. onRowClick={this.tableRowClickDatex} />
  1720. </Spin>
  1721. </TabPane>
  1722. </Tabs>
  1723. </Modal>
  1724. <Modal
  1725. className="customeDetails"
  1726. footer=''
  1727. title="项目申请书"
  1728. width='800px'
  1729. visible={this.state.visitModul1}
  1730. onOk={this.visitOk1}
  1731. onCancel={this.visitCancel1}
  1732. >
  1733. <div>
  1734. {/*<Button type="primary" onClick={this.pdfShows(pdfUrl)}>点击查看</Button>
  1735. <div id="pdfContent" style={{height:"500px",width:"500px",marginLeft:"300px"}} >
  1736. </div>
  1737. onDocumentLoad={this.onDocumentComplete}
  1738. onLoadSuccess={this.onDocumentComplete}
  1739. onDocumentComplete={this.onDocumentComplete}
  1740. onPageRender={this.onPageComplete}
  1741. // "http://s.jishutao.com/upload/achievement/achievement/34576808907162737_achievement_maturity_text_file.pdf"//{pdfUrl}
  1742. */}
  1743. <PDF
  1744. file={pdfUrl}
  1745. onDocumentLoad={this.onDocumentComplete}
  1746. pageIndex={parseInt(this.state.pagec)}
  1747. scale={1.2}
  1748. />
  1749. {paginationss}
  1750. </div>
  1751. </Modal>
  1752. <Modal
  1753. className="customeDetails"
  1754. footer=''
  1755. title="财务资料"
  1756. width='500px'
  1757. visible={this.state.visitModulc}
  1758. onOk={this.visitOkc}
  1759. onCancel={this.visitCancelc}
  1760. > <Form layout="horizontal" onSubmit={this.newSubmitc} id="demand-form">
  1761. <Spin spinning={this.state.loading}>
  1762. <div className="clearfix" >
  1763. <FormItem
  1764. {...formItemLayoutc}
  1765. label="年份"
  1766. >
  1767. <Select placeholder="年份" value={this.state.year} style={{width:'90%'}}
  1768. onChange={(e)=>{this.setState({year:e})}}>
  1769. {
  1770. year.map(function (item) {
  1771. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1772. })
  1773. }
  1774. </Select>
  1775. </FormItem>
  1776. </div>
  1777. <div className="clearfix" >
  1778. <FormItem
  1779. {...formItemLayoutc}
  1780. label="销售额"
  1781. >
  1782. <Input placeholder="销售额" style={{width:'90%'}} value={this.state.salesAmount} onChange={(e) => {
  1783. this.setState({ salesAmount: e.target.value }) }} />万
  1784. </FormItem>
  1785. </div>
  1786. <div className="clearfix" >
  1787. <FormItem
  1788. {...formItemLayoutc}
  1789. label="总资产"
  1790. >
  1791. <Input placeholder="总资产" style={{width:'90%'}} value={this.state.assets} onChange={(e) => {
  1792. this.setState({ assets: e.target.value }) }} />万
  1793. </FormItem>
  1794. </div>
  1795. <div className="clearfix" >
  1796. <FormItem
  1797. {...formItemLayoutc}
  1798. label="研发费用"
  1799. >
  1800. <Input placeholder="研发费用" style={{width:'90%'}} value={this.state.researchAmount} onChange={(e) => {
  1801. this.setState({ researchAmount: e.target.value }) }} />万
  1802. </FormItem>
  1803. </div>
  1804. <Button className="setSubmit" type="primary" htmlType="submit" style={{marginLeft:"100px"}}>保存</Button>
  1805. <Button type="ghost" onClick={this.visitCancelc}>取消</Button>
  1806. </Spin>
  1807. </Form>
  1808. </Modal>
  1809. <Modal
  1810. className="customeDetails"
  1811. footer=''
  1812. title="项目资料"
  1813. width='500px'
  1814. visible={this.state.visitModulx}
  1815. onOk={this.visitOkc}
  1816. onCancel={this.visitCancelc}
  1817. > <Form layout="horizontal" onSubmit={this.newSubmitx} id="demand-form">
  1818. <Spin spinning={this.state.loading}>
  1819. <div className="clearfix" >
  1820. <FormItem
  1821. {...formItemLayoutc}
  1822. label="年份"
  1823. >
  1824. <Select placeholder="年份" value={this.state.year} style={{width:'90%'}}
  1825. onChange={(e)=>{this.setState({year:e})}}>
  1826. {
  1827. year.map(function (item) {
  1828. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1829. })
  1830. }
  1831. </Select>
  1832. </FormItem>
  1833. </div>
  1834. <div className="clearfix" >
  1835. <FormItem
  1836. {...formItemLayoutc}
  1837. label="项目名称"
  1838. >
  1839. <Input placeholder="项目名称" style={{width:'90%'}} value={this.state.projectName} onChange={(e) => {
  1840. this.setState({ projectName: e.target.value }) }} />
  1841. </FormItem>
  1842. </div>
  1843. <div className="clearfix" >
  1844. <FormItem
  1845. {...formItemLayoutc}
  1846. label="项目状态"
  1847. >
  1848. <Select placeholder="项目状态" value={this.state.status} style={{width:'90%'}}
  1849. onChange={(e)=>{this.setState({status:e})}}>
  1850. {
  1851. xiangmoState.map(function (item) {
  1852. return <Select.Option key={item.value} >{item.key}</Select.Option>
  1853. })
  1854. }
  1855. </Select>
  1856. </FormItem>
  1857. </div>
  1858. <div className="clearfix" >
  1859. <FormItem
  1860. {...formItemLayoutc}
  1861. label="备注"
  1862. >
  1863. <Input type="textarea" rows={3} placeholder="备注" style={{width:'90%'}} value={this.state.remark} onChange={(e) => {
  1864. this.setState({ remark: e.target.value }) }} />
  1865. </FormItem>
  1866. </div>
  1867. <Button className="setSubmit" type="primary" htmlType="submit" style={{marginLeft:"100px"}}>保存</Button>
  1868. <Button type="ghost" onClick={this.visitCancelc}>取消</Button>
  1869. </Spin>
  1870. </Form>
  1871. </Modal>
  1872. <TechAchievementDesc
  1873. data={this.state.RowData}
  1874. detailApiUrl={this.props['data-detailApiUrl']}
  1875. achievementCategoryOption={this.state.achievementCategoryOption}
  1876. showDesc={this.state.showDesc}
  1877. uid={this.state.uid}
  1878. closeDesc={this.closeDesc}
  1879. loadDatas={this.loadDatas}
  1880. />
  1881. </div >
  1882. );
  1883. }
  1884. }));
  1885. export default IntentionCustomer;