addService.jsx 64 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541
  1. import React from 'react';
  2. import { Icon, Table, Modal, message, Spin, Input, Select, Button, Form ,Upload,Popconfirm,AutoComplete} from 'antd';
  3. import ajax from 'jquery/src/ajax/xhr.js';
  4. import $ from 'jquery/src/ajax';
  5. import '../../userMangagement.less';
  6. import {orderType} from '../../../../dataDic.js';
  7. import {splitUrl,getOrderType,getOrderStage,getOrderState,getTransactionProject,getPaymentState,getOrderChannel,getApprovedState,getLock,getPaymentMethod,getTransactionChannel,beforeUploadFile} from '../../../../tools.js';
  8. const Option = AutoComplete.Option;
  9. //图片组件
  10. const PicturesWall = React.createClass({
  11. getInitialState() {
  12. return {
  13. previewVisible: false,
  14. previewImage: '',
  15. fileList: [],
  16. }
  17. },
  18. handleCancel() {
  19. this.setState({ previewVisible: false })
  20. },
  21. handlePreview(file) {
  22. this.setState({
  23. previewImage: file.url || file.thumbUrl,
  24. previewVisible: true,
  25. });
  26. },
  27. handleChange(info) {
  28. let fileList = info.fileList;
  29. this.setState({ fileList });
  30. this.props.fileList(fileList);
  31. },
  32. componentWillReceiveProps(nextProps) {
  33. this.state.fileList = nextProps.pictureUrl;
  34. },
  35. render() {
  36. const { previewVisible, previewImage, fileList } = this.state;
  37. const uploadButton = (
  38. <div>
  39. <Icon type="plus" />
  40. <div className="ant-upload-text">点击上传</div>
  41. </div>
  42. );
  43. return (
  44. <div style={{display:"inline-block"}}>
  45. <Upload
  46. beforeUpload={beforeUploadFile}
  47. action={globalConfig.context + "/api/admin/order/uploadOrderImg"}
  48. data={{ 'sign': '' }}
  49. listType="picture-card"
  50. fileList={fileList}
  51. onPreview={this.handlePreview}
  52. onChange={this.handleChange} >
  53. {fileList.length >= 5 ? null : uploadButton}
  54. </Upload>
  55. <Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}>
  56. <img alt="example" style={{ width: '100%' }} src={previewImage} />
  57. </Modal>
  58. </div>
  59. );
  60. }
  61. });
  62. const NewService = Form.create()(React.createClass({
  63. loadData(record) {
  64. this.state.data = [];
  65. this.setState({
  66. loading: true
  67. });
  68. $.ajax({
  69. method: "get",
  70. dataType: "json",
  71. crossDomain: false,
  72. url: globalConfig.context + '/api/admin/order/getOrderCommodity',
  73. data: {
  74. orderNo:record?record.orderNo:this.props.datauser.orderNo
  75. },
  76. success: function (data) {
  77. let theArr = [];
  78. if (!data.data) {
  79. if (data.error && data.error.length) {
  80. message.warning(data.error[0].message);
  81. };
  82. } else {
  83. for (let i = 0; i < data.data.length; i++) {
  84. let thisdata = data.data[i];
  85. theArr.push({
  86. key: i,
  87. id:thisdata.id,
  88. orderNo:thisdata.orderNo,
  89. commodityName:thisdata.commodityName,
  90. commodityType:thisdata.commodityType,
  91. commodityMode:thisdata.commodityMode,
  92. commodityQuantity:thisdata.commodityQuantity,
  93. commodityPrice:thisdata.commodityPrice,
  94. discountPrice:thisdata.discountPrice,
  95. commodityFirstPayment:thisdata.commodityFirstPayment,
  96. createTimes:thisdata.createTimes,
  97. discountFirstPayment:thisdata.discountFirstPayment,
  98. remarks:thisdata.remarks,
  99. });
  100. };
  101. }
  102. this.setState({
  103. dataSource: theArr,
  104. pagination: false,
  105. });
  106. }.bind(this),
  107. }).always(function () {
  108. this.setState({
  109. loading: false
  110. });
  111. }.bind(this));
  112. },
  113. getInitialState() {
  114. return {
  115. loading: false,
  116. visible: false,
  117. orgCodeUrl:[],
  118. bussStats:false,
  119. checkedKeys: [],
  120. lookflowList:[],
  121. active:{
  122. applySign:false
  123. },
  124. editFw:[],
  125. lookState:false,
  126. signBillVisible:false,
  127. commod:'',
  128. columns: [
  129. {
  130. title: '业务项目名称',
  131. dataIndex: 'commodityName',
  132. key: 'commodityName'
  133. }, {
  134. title: '项目类别',
  135. dataIndex: 'commodityType',
  136. key: 'commodityType',
  137. render:(text)=>{
  138. return (getOrderType(text))
  139. }
  140. },{
  141. title: '项目数量',
  142. dataIndex: 'commodityQuantity',
  143. key: 'commodityQuantity'
  144. }, {
  145. title: '服务市价(万元)',
  146. dataIndex: 'commodityPrice',
  147. key: 'commodityPrice'
  148. }, {
  149. title: '实签价格(万元)',
  150. dataIndex: 'discountPrice',
  151. key: 'discountPrice'
  152. }, {
  153. title: '下单时间',
  154. dataIndex: 'createTimes',
  155. key: 'createTimes'
  156. }, {
  157. title: '项目说明',
  158. dataIndex: 'remarks',
  159. key: 'remarks',
  160. render:(text)=>{
  161. return (text&&text.length>8?text.substr(0,8)+'…':text)
  162. }
  163. }, {
  164. title: '操作',
  165. dataIndex: 'ABC',
  166. key: 'ABC',
  167. render: (text, record, index) => {
  168. return <div style={{display:this.props.datauser.active.applySign?'block':'none'}}>
  169. <Popconfirm title="是否删除?" onConfirm={(e)=>{this.delectRow(record)}} okText="是" cancelText="否">
  170. <Button onClick={(e) =>{ e.stopPropagation()}} type="danger">删除</Button>
  171. </Popconfirm>
  172. </div>
  173. }
  174. },
  175. ],
  176. flowList:[
  177. {
  178. title: '平台流水号',
  179. dataIndex: 'billNo',
  180. key: 'billNo',
  181. }, {
  182. title: '平台流水时间',
  183. dataIndex: 'createTime',
  184. key: 'createTime'
  185. }, {
  186. title: '流水金额(万元)',
  187. dataIndex: 'transactionAmount',
  188. key: 'transactionAmount'
  189. },{
  190. title: '付款人名称',
  191. dataIndex: 'payerName',
  192. key: 'payerName'
  193. }, {
  194. title: '收款人名称',
  195. dataIndex: 'payeeName',
  196. key: 'payeeName'
  197. },
  198. {
  199. title: '流水科目',
  200. dataIndex: 'transactionSubject',
  201. key: 'transactionSubject',
  202. render:(text)=>{return getTransactionProject(text) }
  203. }, {
  204. title: '流水渠道',
  205. dataIndex: 'transactionChannel',
  206. key: 'transactionChannel',
  207. render:(text)=>{return getTransactionChannel(text) }
  208. },{
  209. title: '财务流水号',
  210. dataIndex: 'financialPayNo',
  211. key: 'financialPayNo',
  212. }, {
  213. title: '财务流水时间',
  214. dataIndex: 'financialPayTime',
  215. key: 'financialPayTime',
  216. }, {
  217. title: '流水确认',
  218. dataIndex: 'confirmSign',
  219. key: 'confirmSign',
  220. render:(text)=>{return text?'已确认':'待确认' }
  221. },{
  222. title: '确认时间',
  223. dataIndex: 'confirmTime',
  224. key: 'confirmTime',
  225. }
  226. ]
  227. };
  228. },
  229. //新建订单、编辑订单保存
  230. handleSubmit(e) {
  231. e.preventDefault();
  232. let theorgCodeUrl = [];
  233. if (this.state.orgCodeUrl.length) {
  234. let picArr = [];
  235. this.state.orgCodeUrl.map(function (item) {
  236. if ( item.response && item.response.data && item.response.data.length ){
  237. picArr.push(item.response.data);
  238. }
  239. });
  240. theorgCodeUrl = picArr.join(",");
  241. };
  242. if(this.props.userDetaile){
  243. if(!this.state.signTotalAmount){
  244. message.warning('请输入实签订单金额!');
  245. this.refs.signFirstPayment.focus()
  246. return false;
  247. };
  248. if(!this.state.signFirstPayment){
  249. message.warning('实签首款金额不能为空');
  250. this.refs.signFirstPayment.focus()
  251. return false;
  252. };
  253. }else{
  254. if(this.state.orderType==undefined){
  255. message.warning('请选择订单类型');
  256. return false;
  257. };
  258. if(this.state.contractType==undefined&&this.state.orderType==0){
  259. message.warning('请选择业务品类');
  260. return false;
  261. };
  262. if(!this.state.autoId){
  263. message.warning('客户名称不匹配');
  264. return false;
  265. };
  266. }
  267. this.props.form.validateFields((err, values) => {
  268. if(!err) {
  269. this.setState({
  270. loading: true
  271. });
  272. let api=this.props.userDetaile?'/api/admin/order/updateServiceOrder':'/api/admin/order/createOrder';
  273. $.ajax({
  274. method: "POST",
  275. dataType: "json",
  276. crossDomain: false,
  277. url: globalConfig.context + api,
  278. data: !this.props.userDetaile?{
  279. uid:this.state.autoId,
  280. orderType:this.state.orderType,
  281. contractType:this.state.contractType
  282. }:{
  283. orderNo:this.props.datauser.orderNo,
  284. signTotalAmount:this.state.signTotalAmount,
  285. signFirstPayment:this.state.signFirstPayment,
  286. orderRemarks:this.state.orderRemarks,
  287. contractNo:this.state.contractNo,
  288. contractPictureUrl:theorgCodeUrl.length?theorgCodeUrl:'',
  289. }
  290. }).done(function(data) {
  291. this.setState({
  292. loading: false
  293. });
  294. if(!data.error.length) {
  295. message.success('保存成功!');
  296. this.handleOk()
  297. } else {
  298. message.warning(data.error[0].message);
  299. }
  300. }.bind(this));
  301. }
  302. });
  303. },
  304. //查看基本详情基本信息
  305. loaduser(record){
  306. this.state.orderList=[]
  307. $.ajax({
  308. method: "get",
  309. dataType: "json",
  310. crossDomain: false,
  311. url: globalConfig.context + '/api/admin/order/getServiceOrderDetail',
  312. data: {
  313. orderNo:record?record.orderNo:this.props.datauser.orderNo
  314. },
  315. success: function (data) {
  316. let thisData = data.data;
  317. if (!thisData) {
  318. if (data.error && data.error.length) {
  319. message.warning(data.error[0].message);
  320. };
  321. thisData = {};
  322. };
  323. this.setState({
  324. id:thisData.id,
  325. orderList:thisData,
  326. orderAmount:thisData.orderAmount,
  327. firstPayment:thisData.firstPayment,
  328. signTotalAmount:thisData.signTotalAmount,
  329. signFirstPayment:thisData.signFirstPayment,
  330. approval:thisData.approval==0?thisData.approval.toString():thisData.approval,
  331. orderRemarks:thisData.orderRemarks,
  332. orgCodeUrl: thisData.contractPictureUrl ? splitUrl(thisData.contractPictureUrl, ',', globalConfig.avatarHost + '/upload') : [],
  333. //签单
  334. orderNo:thisData.orderNo,//订单编号
  335. buyerName:thisData.buyerName,
  336. contractNo:thisData.contractNo
  337. });
  338. }.bind(this),
  339. }).always(function () {
  340. this.setState({
  341. loading: false
  342. });
  343. }.bind(this));
  344. },
  345. handleOk(e) {
  346. this.setState({
  347. visible: false,
  348. });
  349. this.props.closeDesc(false, true);
  350. },
  351. handleCancel(e) {
  352. this.setState({
  353. visible: false,
  354. });
  355. this.props.closeDesc(false);
  356. },
  357. //删除
  358. delectRow(record) {
  359. this.setState({
  360. loading: true
  361. });
  362. $.ajax({
  363. method: "get",
  364. dataType: "json",
  365. crossDomain: false,
  366. url: globalConfig.context + "/api/admin/order/deleteOrderCommodity",
  367. data: {
  368. detailId:record.id
  369. }
  370. }).done(function (data) {
  371. if (!data.error.length) {
  372. message.success('删除成功!');
  373. this.setState({
  374. loading: false,
  375. });
  376. this.loaduser()
  377. this.loadData();
  378. } else {
  379. message.warning(data.error[0].message);
  380. };
  381. }.bind(this));
  382. },
  383. //添加明细
  384. addDetailed(){
  385. this.setState({
  386. gid:'',
  387. customerArr:[],
  388. commodityName:'',
  389. commodityId:'',
  390. commodityMode:'',
  391. commodityQuantity:'',
  392. commodityPrice:'',
  393. discountPrice:'',
  394. commodityFirstPayment:'',
  395. discountFirstPayment:'',
  396. remarks:'',
  397. addState:1,
  398. addnextVisible: true
  399. })
  400. },
  401. nextCancel() {
  402. this.setState({
  403. addnextVisible: false
  404. })
  405. },
  406. tableRowClick(record, index) {
  407. this.setState({
  408. active:this.props.datauser.active,
  409. editFw:record,
  410. jid:record.id,
  411. discountFirstPayment:record.discountFirstPayment,
  412. discountPrice:record.discountPrice,
  413. addnextVisible:true,
  414. addState:0,
  415. });
  416. },
  417. getOrgCodeUrl(e) {
  418. this.setState({ orgCodeUrl: e });
  419. },
  420. componentWillMount() {
  421. },
  422. //查看订单详情里面的各种骚操作
  423. //受理订单
  424. admissibleOrderOK(){
  425. let idArr=this.props.datauser;
  426. this.props.admissibleOrder(idArr,true)
  427. },
  428. //拒绝受理
  429. admissibleOrderCancel(){
  430. let idArr=this.props.datauser;
  431. this.props.admissibleOrder(idArr,false)
  432. },
  433. //取消订单
  434. cancelOrder(){
  435. let idArr=this.props.datauser;
  436. this.props.operation(idArr,3)
  437. },
  438. //作废订单
  439. scrapOrder(){
  440. let idArr=this.props.datauser;
  441. this.props.operation(idArr,2)
  442. },
  443. //锁定订单
  444. lockOrder(){
  445. let idArr=this.props.datauser;
  446. this.props.operation(idArr,0)
  447. },
  448. //解锁订单
  449. unlockOrder(){
  450. let idArr=this.props.datauser;
  451. this.props.operation(idArr,1)
  452. },
  453. //签单
  454. signBitt(){
  455. this.setState({
  456. contractNo:this.state.contractNo,
  457. signVisible:true
  458. })
  459. // if(this.state.contractNo){
  460. //
  461. // }else{
  462. // message.warning("请输入合同编号!")
  463. // }
  464. },
  465. signBittOk(){
  466. this.setState({
  467. signVisible:false
  468. })
  469. },
  470. signBillOk(){
  471. this.setState({
  472. signBillVisible:false
  473. })
  474. },
  475. signBillCancel(e) {
  476. this.setState({
  477. signVisible:false,
  478. signBillVisible: false,
  479. });
  480. this.props.closeDesc(false, true);
  481. },
  482. //加载(自动补全)
  483. supervisor(e,state){ //客户名称与服务名称自动补全
  484. let api=state?'/api/admin/customer/findCustomerByName':'/api/admin/order/getBusinessProjectByName';
  485. $.ajax({
  486. method: "get",
  487. dataType: "json",
  488. crossDomain: false,
  489. url: globalConfig.context + api,
  490. data:state?{
  491. name:e
  492. }:{
  493. businessName:e
  494. },
  495. success: function (data) {
  496. let thedata=data.data;
  497. if (!thedata) {
  498. if (data.error && data.error.length) {
  499. message.warning(data.error[0].message);
  500. };
  501. thedata = {};
  502. };
  503. this.setState({
  504. states:state,
  505. customerArr:thedata,
  506. });
  507. }.bind(this),
  508. }).always(function () {
  509. this.setState({
  510. loading: false
  511. });
  512. }.bind(this));
  513. },
  514. //上级主管输入框失去焦点是判断客户是否存在
  515. selectAuto(value){
  516. let kid=[];
  517. let fwList=this.state.customerArr;
  518. fwList.map(function(item){
  519. if(value==item.bname){
  520. kid=item
  521. }
  522. })
  523. this.setState({
  524. commodityName:value,
  525. gid:kid.id,
  526. commodityPrice:kid.price==0?kid.price.toString():kid.price,
  527. commodityFirstPayment:kid.firstPayment==0?kid.firstPayment.toString():kid.firstPayment
  528. })
  529. },
  530. //客户
  531. selectAutoCUT(value){
  532. let autoIds;
  533. let fwList=this.state.customerArr;
  534. fwList.map(function(item){
  535. if(value==item.name){
  536. autoIds=item.id
  537. }
  538. })
  539. this.setState({
  540. customerName:value,
  541. autoId:autoIds
  542. })
  543. },
  544. //服务值改变时请求客户名称
  545. httpChange(e){
  546. this.state.gid='';
  547. if(e.length>=1){
  548. this.supervisor(e,false);
  549. }
  550. this.setState({
  551. commodityName:e
  552. })
  553. },
  554. //客户名称自动补全
  555. customerChange(e){
  556. this.state.autoId='';
  557. if(e.length>=1){
  558. this.supervisor(e,true);
  559. }
  560. this.setState({
  561. customerName:e
  562. })
  563. },
  564. //新建明细保存
  565. nextSubmit(e) {
  566. e.preventDefault();
  567. if(this.state.gid==undefined||!this.state.gid){
  568. message.warning('服务名称不匹配!');
  569. return false;
  570. };
  571. if(!this.state.commodityPrice){
  572. message.warning('请输入市场价格!');
  573. this.refs.commodityPrice.focus();
  574. return false;
  575. };
  576. if(!this.state.discountPrice){
  577. message.warning('请输入实签价格!');
  578. this.refs.discountPrice.focus();
  579. return false;
  580. };
  581. if(!this.state.commodityQuantity){
  582. message.warning('请输入商品数量!');
  583. this.refs.commodityQuantity.focus();
  584. return false;
  585. };
  586. if(!this.state.commodityFirstPayment){
  587. message.warning('请输入市场首付金额!');
  588. this.refs.commodityFirstPayment.focus();
  589. return false;
  590. };
  591. if(!this.state.discountFirstPayment){
  592. message.warning('请输入签单首付金额!');
  593. this.refs.discountFirstPayment.focus();
  594. return false;
  595. };
  596. this.setState({
  597. loading: true
  598. });
  599. let api=this.state.addState?'/api/admin/order/addOrderCommodity':'/api/bianji';
  600. $.ajax({
  601. method: "POST",
  602. dataType: "json",
  603. crossDomain: false,
  604. url: globalConfig.context +api ,
  605. data: {
  606. commodityId:this.state.gid,
  607. orderNo:this.props.datauser.orderNo,
  608. commodityName:this.state.commodityName,//商品名称
  609. commodityMode:this.state.commodityMode,//商品规格
  610. commodityQuantity:this.state.commodityQuantity,//商品数量
  611. commodityType:0,//商品类型
  612. commodityPrice:this.state.commodityPrice,//市场总价
  613. discountPrice:this.state.discountPrice,//签单总价
  614. commodityFirstPayment:this.state.commodityFirstPayment,//市场首付金额
  615. discountFirstPayment:this.state.discountFirstPayment,//签单首付金额
  616. remarks:this.state.remarks,//服务说明
  617. }
  618. }).done(function(data) {
  619. this.setState({
  620. loading: false
  621. });
  622. if(!data.error.length) {
  623. message.success('保存成功!');
  624. this.nextCancel()
  625. this.loaduser(this.props.datauser);
  626. this.loadData();
  627. } else {
  628. message.warning(data.error[0].message);
  629. }
  630. }.bind(this));
  631. },
  632. tabRowSave(e){
  633. e.preventDefault();
  634. if(!this.state.discountPrice){
  635. message.warning('实签价格不能为空!');
  636. return false;
  637. };
  638. if(!this.state.discountFirstPayment){
  639. message.warning('签单首付金额不能为空!');
  640. return false;
  641. };
  642. $.ajax({
  643. method: "POST",
  644. dataType: "json",
  645. crossDomain: false,
  646. url: globalConfig.context +'/api/admin/order/updateOrderCommodity' ,
  647. data: {
  648. detailId:this.state.jid,
  649. orderNo:this.props.datauser.orderNo,
  650. discountPrice:this.state.discountPrice,//签单总价
  651. discountFirstPayment:this.state.discountFirstPayment,//签单首付金额
  652. commodityQuantity:this.state.editFw.commodityQuantity,
  653. remarks:this.state.editFw.remarks
  654. }
  655. }).done(function(data) {
  656. this.setState({
  657. loading: false
  658. });
  659. if(!data.error.length) {
  660. message.success('保存成功!');
  661. this.nextCancel()
  662. this.loaduser(this.props.datauser);
  663. this.loadData();
  664. } else {
  665. message.warning(data.error[0].message);
  666. }
  667. }.bind(this));
  668. },
  669. //签单保存
  670. signOk(e){
  671. e.preventDefault();
  672. this.temporarySave(false)
  673. },
  674. //暂存信息
  675. temporary(){
  676. this.temporarySave(true)
  677. },
  678. signSub(e){
  679. e.preventDefault();
  680. this.setState({
  681. loading: true
  682. });
  683. $.ajax({
  684. method: "POST",
  685. dataType: "json",
  686. crossDomain: false,
  687. url: globalConfig.context +'/api/admin/order/signServiceOrder' ,
  688. data: {
  689. orderNo:this.props.datauser.orderNo,
  690. signTotalAmount:this.state.signTotalAmount,
  691. signFirstPayment:this.state.signFirstPayment,
  692. approval:this.state.approval,
  693. orderRemarks:this.state.orderRemarks,
  694. contractNo:this.state.contractNo
  695. }
  696. }).done(function(data) {
  697. this.setState({
  698. loading: false
  699. });
  700. if(!data.error.length) {
  701. message.success('操作成功!');
  702. this.signBillCancel()
  703. } else {
  704. message.warning(data.error[0].message);
  705. }
  706. }.bind(this));
  707. },
  708. //签单保存与暂存函数
  709. temporarySave(e){
  710. if(!this.state.signTotalAmount){
  711. message.warning('实签款项不能为空!')
  712. return false;
  713. };
  714. if(!this.state.signTotalAmount){
  715. message.warning('实签首款不能为空!')
  716. return false;
  717. };
  718. if(this.state.approval==undefined){
  719. message.warning('实签首款不能为空!')
  720. return false;
  721. };
  722. if(!this.state.contractNo){
  723. message.warning("请输入合同编号!");
  724. return false;
  725. }
  726. this.setState({
  727. loading: true
  728. });
  729. let theorgCodeUrl = [];
  730. if (this.state.orgCodeUrl.length) {
  731. let picArr = [];
  732. this.state.orgCodeUrl.map(function (item) {
  733. if ( item.response && item.response.data && item.response.data.length ){
  734. picArr.push(item.response.data);
  735. }
  736. });
  737. theorgCodeUrl = picArr.join(",");
  738. };
  739. let api=e?'/api/admin/order/updateServiceOrder':'/api/admin/order/signServiceOrder';
  740. $.ajax({
  741. method: "POST",
  742. dataType: "json",
  743. crossDomain: false,
  744. url: globalConfig.context +api ,
  745. data: {
  746. orderNo:this.props.uid?this.props.uid.orderNo:this.props.datauser.orderNo,
  747. signTotalAmount:this.state.signTotalAmount,
  748. signFirstPayment:this.state.signFirstPayment,
  749. approval:this.state.approval,
  750. orderRemarks:this.state.orderRemarks,
  751. contractNo:this.state.contractNo,
  752. contractPictureUrl:theorgCodeUrl.length?theorgCodeUrl:'',
  753. }
  754. }).done(function(data) {
  755. this.setState({
  756. loading: false
  757. });
  758. if(!data.error.length) {
  759. message.success('操作成功!');
  760. this.signBillCancel()
  761. } else {
  762. message.warning(data.error[0].message);
  763. }
  764. }.bind(this));
  765. },
  766. lookflow(){
  767. this.setState({
  768. loading: true,
  769. lookVisible:true,
  770. })
  771. this.state.lookSource=[];
  772. $.ajax({
  773. method: "get",
  774. dataType: "json",
  775. crossDomain: false,
  776. url: globalConfig.context +'/api/admin/order/getBillByOrderNo',
  777. data: {
  778. orderNo:this.props.datauser.orderNo,
  779. },
  780. success: function (data) {
  781. let theArr = [];
  782. if (!data.data) {
  783. if (data.error && data.error.length) {
  784. message.warning(data.error[0].message);
  785. };
  786. } else {
  787. for (let i = 0; i < data.data.length; i++) {
  788. let thisdata = data.data[i];
  789. theArr.push({
  790. key: i,
  791. billNo: thisdata.billNo,
  792. transactionAmount:thisdata.transactionAmount,
  793. createTime:thisdata.createTime,
  794. transactionAmount:thisdata.transactionAmount,
  795. payerName:thisdata.payerName,
  796. payeeName:thisdata.payeeName,
  797. transactionSubject:thisdata.transactionSubject,
  798. transactionChannel:thisdata.transactionChannel,
  799. financialPayNo:thisdata.financialPayNo,
  800. financialPayTime:thisdata.financialPayTime,
  801. orderNo:thisdata.orderNo,
  802. departmentName:thisdata.departmentName,
  803. salesmanName:thisdata.salesmanName,
  804. financeName:thisdata.financeName,
  805. confirmSign:thisdata.confirmSign,
  806. deleteSign:thisdata.deleteSign,
  807. confirmTime:thisdata.confirmTime
  808. });
  809. };
  810. };
  811. this.setState({
  812. lookflowList: theArr,
  813. });
  814. }.bind(this),
  815. }).always(function () {
  816. this.setState({
  817. loading: false
  818. });
  819. }.bind(this));
  820. },
  821. lookCancel(){
  822. this.setState({
  823. lookVisible:false
  824. })
  825. },
  826. //查看流失。项目列表
  827. lookSee(state) {
  828. this.state.lookSource=[];
  829. this.setState({
  830. loading: true
  831. });
  832. let api=state?'/api/xiangmu':'/api/liushui'
  833. $.ajax({
  834. method: "get",
  835. dataType: "json",
  836. crossDomain: false,
  837. url: globalConfig.context + api,
  838. data: {
  839. orderNo:this.props.datauser.orderNo
  840. },
  841. success: function (data) {
  842. let theArr = [];
  843. if (!data.data) {
  844. if (data.error && data.error.length) {
  845. message.warning(data.error[0].message);
  846. };
  847. } else {
  848. for (let i = 0; i < data.data.length; i++) {
  849. let thisdata = data.data[i];
  850. theArr.push({
  851. key: i,
  852. id:thisdata.id,
  853. orderNo:thisdata.orderNo,
  854. commodityName:thisdata.commodityName,
  855. commodityType:thisdata.commodityType,
  856. commodityMode:thisdata.commodityMode,
  857. commodityQuantity:thisdata.commodityQuantity,
  858. commodityPrice:thisdata.commodityPrice,
  859. discountPrice:thisdata.discountPrice,
  860. commodityFirstPayment:thisdata.commodityFirstPayment,
  861. createTimes:thisdata.createTimes,
  862. discountFirstPayment:thisdata.discountFirstPayment,
  863. remarks:thisdata.remarks,
  864. });
  865. };
  866. }
  867. this.setState({
  868. lookSource: theArr,
  869. });
  870. }.bind(this),
  871. }).always(function () {
  872. this.setState({
  873. loading: false
  874. });
  875. }.bind(this));
  876. },
  877. //开单选择订单类型骚操作
  878. orderTypeFn(e){
  879. if(e==0){
  880. this.setState({
  881. bussStats:true,
  882. orderType:e
  883. })
  884. }else{
  885. this.setState({
  886. contractType:undefined,
  887. bussStats:false,
  888. orderType:e
  889. })
  890. }
  891. },
  892. //品类数据获取
  893. category(){
  894. this.setState({
  895. loading: true
  896. });
  897. $.ajax({
  898. method: "get",
  899. dataType: "json",
  900. crossDomain: false,
  901. url: globalConfig.context + "/api/admin/Varieties/getSuperList",
  902. data: {
  903. },
  904. success: function(data) {
  905. let thedata = data.data;
  906. let theArr=[];
  907. if(!thedata) {
  908. if(data.error && data.error.length) {
  909. message.warning(data.error[0].message);
  910. };
  911. thedata = {};
  912. }else{
  913. thedata.map(function(item,index){
  914. theArr.push({
  915. key:index,
  916. name:item.cname,
  917. id:item.id,
  918. })
  919. })
  920. }
  921. this.setState({
  922. contractType:undefined,
  923. categoryArr:theArr,
  924. })
  925. }.bind(this),
  926. }).always(function() {
  927. this.setState({
  928. loading: false
  929. });
  930. }.bind(this));
  931. },
  932. componentWillReceiveProps(nextProps) { //props改变时触发
  933. this.state.visible = nextProps.showDesc;
  934. this.state.signBillVisible=nextProps.signBillVisible;
  935. if(this.state.signBillVisible){
  936. this.loaduser(nextProps.uid)
  937. };
  938. if(nextProps.userDetaile && nextProps.showDesc) {
  939. this.loaduser(nextProps.datauser);
  940. this.loadData(nextProps.datauser);
  941. }else{
  942. this.category();
  943. this.setState({
  944. orderType:undefined,
  945. customerName:'',
  946. autoId:'',
  947. customerArr:[],
  948. contractType:undefined,
  949. bussStats:false
  950. })
  951. }
  952. },
  953. render() {
  954. const FormItem = Form.Item
  955. const formItemLayout = {
  956. labelCol: { span: 8 },
  957. wrapperCol: { span: 14 },
  958. };
  959. const editFws=this.state.editFw;
  960. const categoryList=this.state.categoryArr ||[];
  961. const orderDetaiel=this.state.orderList || [];
  962. const dataSources=this.state.customerArr || [];
  963. const options = this.state.states?dataSources.map((group,index) =>
  964. <Select.Option key={index} value={group.name}>{group.name}</Select.Option>
  965. ):dataSources.map((group,index) =>
  966. <Select.Option key={group.id} value={group.bname}>{group.bname}</Select.Option>
  967. )
  968. return(
  969. <div>
  970. <Modal maskClosable={false} visible={this.state.visible}
  971. onOk={this.handleOk} onCancel={this.handleCancel}
  972. width={!this.props.userDetaile?'600px':'1000px'}
  973. title={!this.props.userDetaile?'创建订单':'编辑订单'}
  974. footer=''
  975. className="admin-desc-content">
  976. <Form layout="horizontal" onSubmit={this.handleSubmit} id="demand-form" style={{paddingBottom:'40px'}} >
  977. <Spin spinning={this.state.loading}>
  978. <div className="clearfix">
  979. {!this.props.userDetaile?
  980. <div className="clearfix">
  981. <div className="clearfix">
  982. <FormItem
  983. {...formItemLayout}
  984. label="订单类型" >
  985. <Select placeholder="请选择订单类型"
  986. style={{ width:'200px'}}
  987. value={this.state.orderType}
  988. onChange={this.orderTypeFn}>
  989. {
  990. orderType.map(function (item) {
  991. return <Select.Option key={item.value} >{item.key}</Select.Option>
  992. })
  993. }
  994. </Select>
  995. <span className="mandatory">*</span>
  996. </FormItem>
  997. </div>
  998. {this.state.bussStats&&<div className="clearfix">
  999. <FormItem
  1000. {...formItemLayout}
  1001. label="业务品类" >
  1002. <Select placeholder="请选择业务品类"
  1003. style={{ width:'200px'}}
  1004. value={this.state.contractType}
  1005. onChange={(e)=>{this.setState({contractType:e})}}>
  1006. {
  1007. categoryList.map(function (item) {
  1008. return <Select.Option key={item.id} >{item.name}</Select.Option>
  1009. })
  1010. }
  1011. </Select>
  1012. <span className="mandatory">*</span>
  1013. </FormItem>
  1014. </div>}
  1015. <div className="clearfix">
  1016. <FormItem
  1017. {...formItemLayout}
  1018. label="客户名称" >
  1019. <AutoComplete
  1020. className="certain-category-search"
  1021. dropdownClassName="certain-category-search-dropdown"
  1022. dropdownMatchSelectWidth={false}
  1023. dropdownStyle={{ width: 200 }}
  1024. size="large"
  1025. style={{ width: '200px' }}
  1026. dataSource={options}
  1027. placeholder="输入名称"
  1028. value={this.state.customerName}
  1029. onChange={this.customerChange}
  1030. filterOption={true}
  1031. onSelect={this.selectAutoCUT}
  1032. >
  1033. <Input/>
  1034. </AutoComplete>
  1035. <span className="mandatory">*</span>
  1036. </FormItem>
  1037. </div>
  1038. </div>:<div className="clearfix">
  1039. <FormItem className="half-item"
  1040. {...formItemLayout}
  1041. label="订单编号" >
  1042. <span>{orderDetaiel.orderNo}</span>
  1043. </FormItem>
  1044. <FormItem className="half-item"
  1045. {...formItemLayout}
  1046. label="下单时间" >
  1047. <span>{orderDetaiel.createTime}</span>
  1048. </FormItem>
  1049. <FormItem className="half-item"
  1050. {...formItemLayout}
  1051. label="客户名称" >
  1052. <span>{orderDetaiel.buyerName}</span>
  1053. </FormItem>
  1054. <FormItem className="half-item"
  1055. {...formItemLayout}
  1056. label="订单类型" >
  1057. <span>{getOrderType(orderDetaiel.orderType)}</span>
  1058. </FormItem>
  1059. <FormItem className="half-item"
  1060. {...formItemLayout}
  1061. label="订单渠道" >
  1062. <span>{getOrderChannel(orderDetaiel.orderChannel)}</span>
  1063. </FormItem>
  1064. <FormItem className="half-item"
  1065. {...formItemLayout}
  1066. label="订单状态" >
  1067. <span>{getOrderState(orderDetaiel.orderStatus)}</span>
  1068. </FormItem>
  1069. <FormItem className="half-item"
  1070. {...formItemLayout}
  1071. label="已收款项" >
  1072. <span>{orderDetaiel.actuallyTotalAmount+'万元'}</span>
  1073. </FormItem>
  1074. <FormItem className="half-item"
  1075. {...formItemLayout}
  1076. label="结算状态" >
  1077. <span>{getPaymentState(orderDetaiel.liquidationStatus)}</span>
  1078. </FormItem>
  1079. <FormItem className="half-item"
  1080. {...formItemLayout}
  1081. label="市价订单金额" >
  1082. <span>{orderDetaiel.orderAmount+'万元'}</span>
  1083. </FormItem>
  1084. <FormItem className="half-item"
  1085. {...formItemLayout}
  1086. label="市价首款金额" >
  1087. <span>{orderDetaiel.firstPayment+'万元'}</span>
  1088. </FormItem>
  1089. {orderDetaiel.deleteSign==0&&orderDetaiel.orderStatus==2?
  1090. <div className='clearfix'>
  1091. <FormItem className="half-item"
  1092. {...formItemLayout}
  1093. label="实签订单金额(万元)" >
  1094. <Input placeholder="实签订单金额" ref='signTotalAmount' value={this.state.signTotalAmount} onChange={(e)=>{this.setState({signTotalAmount:e.target.value})}} style={{width:'240px'}} />
  1095. <span className="mandatory">*</span>
  1096. </FormItem>
  1097. <FormItem className="half-item"
  1098. {...formItemLayout}
  1099. label="实签首款金额(万元)" >
  1100. <Input placeholder="请输入实签首款金额" ref='signFirstPayment' value={this.state.signFirstPayment} onChange={(e)=>{this.setState({signFirstPayment:e.target.value})}} style={{width:'240px'}} />
  1101. <span className="mandatory">*</span>
  1102. </FormItem>
  1103. <FormItem className="half-item"
  1104. {...formItemLayout}
  1105. label="特批立项" >
  1106. <span>{getApprovedState(this.state.approval)}</span>
  1107. </FormItem>
  1108. <FormItem className="half-item"
  1109. {...formItemLayout}
  1110. label="合同编号" >
  1111. <Input placeholder="请输入合同编号" value={this.state.contractNo}
  1112. onChange={(e)=>{this.setState({contractNo:e.target.value})}} style={{width:'240px'}} />
  1113. </FormItem>
  1114. <div className='clearfix'>
  1115. <FormItem
  1116. labelCol={{ span: 4 }}
  1117. wrapperCol={{ span: 18 }}
  1118. label="合同扫描件" >
  1119. <PicturesWall
  1120. fileList={this.getOrgCodeUrl}
  1121. pictureUrl={this.state.orgCodeUrl} />
  1122. <p>图片建议:要清晰。</p>
  1123. </FormItem>
  1124. </div>
  1125. <div className='clearfix'>
  1126. <FormItem
  1127. labelCol={{ span: 4 }}
  1128. wrapperCol={{ span: 16 }}
  1129. label="订单留言" >
  1130. <Input type="textarea" placeholder="请输入订单留言" rows={4} value={this.state.orderRemarks}
  1131. onChange={(e)=>{this.setState({orderRemarks:e.target.value})}}/>
  1132. </FormItem>
  1133. </div>
  1134. </div>:
  1135. <div className='clearfix'>
  1136. <FormItem className="half-item"
  1137. {...formItemLayout}
  1138. label="实签订单金额" >
  1139. <span>{orderDetaiel.signTotalAmount+'万元'}</span>
  1140. </FormItem>
  1141. <FormItem className="half-item"
  1142. {...formItemLayout}
  1143. label="实签首款金额" >
  1144. <span>{orderDetaiel.signFirstPayment+'万元'}</span>
  1145. </FormItem>
  1146. <FormItem className="half-item"
  1147. {...formItemLayout}
  1148. label="特批立项" >
  1149. <span>{getApprovedState(orderDetaiel.approval)}</span>
  1150. </FormItem>
  1151. <FormItem className="half-item"
  1152. {...formItemLayout}
  1153. label="合同编号" >
  1154. <span>{orderDetaiel.contractNo}</span>
  1155. </FormItem>
  1156. <div className="clearfix">
  1157. <FormItem
  1158. labelCol={{ span: 4 }}
  1159. wrapperCol={{ span: 18 }}
  1160. label="合同扫描件" >
  1161. <Upload className="demandDetailShow-upload"
  1162. beforeUpload={beforeUploadFile}
  1163. listType="picture-card"
  1164. fileList={this.state.orgCodeUrl}
  1165. onPreview={(file) => {
  1166. this.setState({
  1167. previewImage: file.url || file.thumbUrl,
  1168. previewVisible: true,
  1169. });
  1170. }} >
  1171. </Upload>
  1172. <Modal maskClosable={false} footer={null}
  1173. visible={this.state.previewVisible}
  1174. onCancel={() => { this.setState({ previewVisible: false }) }}>
  1175. <img alt="" style={{ width: '100%' }} src={this.state.previewImage || ''} />
  1176. </Modal>
  1177. </FormItem>
  1178. </div>
  1179. <div className='clearfix'>
  1180. <FormItem
  1181. labelCol={{ span: 4 }}
  1182. wrapperCol={{ span: 16 }}
  1183. label="订单留言" >
  1184. <span>{orderDetaiel.orderRemarks}</span>
  1185. </FormItem>
  1186. </div>
  1187. </div>}
  1188. <div className='clearfix'>
  1189. <FormItem className="half-item"
  1190. {...formItemLayout}
  1191. label="订单负责人" >
  1192. <span>{orderDetaiel.salesmanName}</span>
  1193. </FormItem>
  1194. <FormItem className="half-item"
  1195. {...formItemLayout}
  1196. label="业务品类" >
  1197. <span>{orderDetaiel.projectType}</span>
  1198. </FormItem>
  1199. </div>
  1200. <div className='clearfix'>
  1201. <FormItem className="half-item"
  1202. {...formItemLayout}
  1203. label="意向时间" >
  1204. <span>{orderDetaiel.createTime}</span>
  1205. </FormItem>
  1206. <FormItem className="half-item"
  1207. {...formItemLayout}
  1208. label="签单时间" >
  1209. <span>{orderDetaiel.signTime}</span>
  1210. </FormItem>
  1211. <FormItem className="half-item"
  1212. {...formItemLayout}
  1213. label="财务负责人" >
  1214. <span>{orderDetaiel.financeName}</span>
  1215. <Button onClick={this.lookflow} style={{float:'right'}}>查看流水</Button>
  1216. </FormItem>
  1217. <FormItem className="half-item"
  1218. {...formItemLayout}
  1219. label="项目负责人" >
  1220. <span>{orderDetaiel.technicianName}</span>
  1221. </FormItem>
  1222. <FormItem className="half-item"
  1223. {...formItemLayout}
  1224. label="立项时间" >
  1225. <span>{orderDetaiel.setUpTime}</span>
  1226. </FormItem>
  1227. </div>
  1228. <div>
  1229. <span style={{marginLeft:'50px',fontSize:'20px'}}>项目业务</span>
  1230. {this.props.datauser.active.applySign?<Button type='primary' onClick={this.addDetailed} style={{float:'right',marginRight:'50px',marginBottom:'15px',display:true?'block':'none'}}>添加明细</Button>:''}
  1231. </div>
  1232. <div className="patent-table">
  1233. <Spin spinning={this.state.loading}>
  1234. <Table columns={this.state.columns}
  1235. dataSource={this.state.dataSource}
  1236. pagination={this.state.pagination}
  1237. onRowClick={this.tableRowClick}
  1238. />
  1239. </Spin>
  1240. </div>
  1241. </div>}
  1242. <div className='addSave' style={{marginTop:'15px'}}>
  1243. {!this.props.userDetaile||orderDetaiel.deleteSign==0&&orderDetaiel.orderStatus==2?<Button className="setSave" type="primary" htmlType="submit">保存</Button>:''}
  1244. {this.props.userDetaile?<div className='operations'>
  1245. {this.props.datauser.active.confirmIntention&&<Popconfirm title={'请确认您是否受理来自【'+this.props.datauser.buyerName+'】发起的服务意向订单?'} onConfirm={(e)=>{this.admissibleOrderOK()}} onCancel={(e)=>{this.admissibleOrderCancel()}} okText="同意" cancelText="拒绝">
  1246. <Button style={{marginRight:'15px',marginLeft:'200px'}} type="primary">受理意向</Button>
  1247. </Popconfirm>}
  1248. {this.props.datauser.active.applySign&&<Button style={{marginRight:'10px'}} onClick={(e) =>{this.signBitt()}} type="primary">签单</Button>}
  1249. {this.props.datauser.active.applyForCancel&&<Popconfirm title={'请确认您是否取消客户【'+this.props.datauser.buyerName+'】的服务订单,订单取消将导致业务终止!'} onConfirm={(e)=>{this.cancelOrder()}} okText="确认" cancelText="取消">
  1250. <Button style={{marginRight:'10px'}} type="danger">取消订单</Button>
  1251. </Popconfirm>}
  1252. {this.props.datauser.active.applyRevoke&&<Popconfirm title={'请确认您是否作废客户【'+this.props.datauser.buyerName+'】的服务订单,订单作废将导致订单失效!'} onConfirm={(e)=>{this.scrapOrder()}} okText="确认" cancelText="取消">
  1253. <Button style={{marginRight:'10px',marginLeft:'200px'}} type="danger">作废</Button>
  1254. </Popconfirm>}
  1255. {this.props.datauser.active.applyLock&&<Popconfirm title={'请确认您是否锁定客户【'+this.props.datauser.buyerName+'】的服务订单,订单锁定将导致订单暂停!'} onConfirm={(e)=>{this.lockOrder()}} okText="确认" cancelText="取消">
  1256. <Button style={{marginRight:'10px',marginLeft:'200px'}} type="danger">锁定</Button>
  1257. </Popconfirm>}
  1258. {this.props.datauser.active.applyUnLock&&<Popconfirm title={'请确认您是否解锁客户【'+this.props.datauser.buyerName+'】的服务订单,订单解锁将导致订单正常!'} onConfirm={(e)=>{this.unlockOrder()}} okText="确认" cancelText="取消">
  1259. <Button style={{marginRight:'10px',marginLeft:'200px'}} type="primary">解锁</Button>
  1260. </Popconfirm>}
  1261. </div>:''}
  1262. <Button className="cancel" type="ghost" onClick={this.handleCancel} style={{float:'right',marginRight:'200px'}}>返回</Button>
  1263. </div>
  1264. </div>
  1265. </Spin>
  1266. </Form >
  1267. </Modal>
  1268. <Modal maskClosable={false} visible={this.state.addnextVisible}
  1269. onOk={this.nextCancel} onCancel={this.nextCancel}
  1270. width='800px'
  1271. title={this.state.addState?'添加服务':'编辑服务'}
  1272. footer=''
  1273. className="admin-desc-content">
  1274. <Form layout="horizontal" onSubmit={this.nextSubmit} id="demand-form">
  1275. <Spin spinning={this.state.loading}>
  1276. {this.state.addState?<div className="clearfix">
  1277. <FormItem className="half-item"
  1278. {...formItemLayout}
  1279. label="服务名称" >
  1280. <AutoComplete
  1281. className="certain-category-search"
  1282. dropdownClassName="certain-category-search-dropdown"
  1283. dropdownMatchSelectWidth={false}
  1284. dropdownStyle={{ width: 200 }}
  1285. style={{ width: '200px' }}
  1286. dataSource={options}
  1287. placeholder="输入服务名称"
  1288. value={this.state.commodityName}
  1289. onChange={this.httpChange}
  1290. filterOption={true}
  1291. onSelect={this.selectAuto}
  1292. >
  1293. <Input/>
  1294. </AutoComplete>
  1295. <span className="mandatory">*</span>
  1296. </FormItem>
  1297. <FormItem className="half-item"
  1298. {...formItemLayout}
  1299. label="市场价格(万元)" >
  1300. <span>{this.state.commodityPrice}</span>
  1301. </FormItem>
  1302. <FormItem className="half-item"
  1303. {...formItemLayout}
  1304. label="实签价格(万元)" >
  1305. <Input placeholder="请输入实签价格" value={this.state.discountPrice} style={{width:'200px'}}
  1306. onChange={(e)=>{this.setState({discountPrice:e.target.value})}} ref="discountPrice"/>
  1307. <span className="mandatory">*</span>
  1308. </FormItem>
  1309. <FormItem className="half-item"
  1310. {...formItemLayout}
  1311. label="服务数量" >
  1312. <Input placeholder="请输入服务数量" value={this.state.commodityQuantity} style={{width:'200px'}}
  1313. onChange={(e)=>{this.setState({commodityQuantity:e.target.value})}} ref="commodityQuantity"/>
  1314. <span className="mandatory">*</span>
  1315. </FormItem>
  1316. <FormItem className="half-item"
  1317. {...formItemLayout}
  1318. label="市场首付金额(万元)" >
  1319. <span>{this.state.commodityFirstPayment}</span>
  1320. </FormItem>
  1321. <FormItem className="half-item"
  1322. {...formItemLayout}
  1323. label="签单首付金额(万元)" >
  1324. <Input placeholder="请输入签单首付金额" value={this.state.discountFirstPayment} style={{width:'200px'}}
  1325. onChange={(e)=>{this.setState({discountFirstPayment:e.target.value})}} ref='discountFirstPayment'/>
  1326. <span className="mandatory">*</span>
  1327. </FormItem>
  1328. <div className='clearfix'>
  1329. <FormItem
  1330. labelCol={{ span: 4 }}
  1331. wrapperCol={{ span: 16 }}
  1332. label="服务说明" >
  1333. <Input type='textarea' placeholder="请输入服务说明" value={this.state.remarks}
  1334. onChange={(e)=>{this.setState({remarks:e.target.value})}} />
  1335. </FormItem>
  1336. </div>
  1337. <FormItem wrapperCol={{ span: 12, offset: 4 }} className="half-middle">
  1338. <Button className="submitSave" type="primary" htmlType="submit">保存</Button>
  1339. <Button className="submitSave" type="ghost" onClick={this.nextCancel}>取消</Button>
  1340. </FormItem>
  1341. </div>:
  1342. <div className='clearfix'>
  1343. <FormItem className="half-item"
  1344. {...formItemLayout}
  1345. label="服务名称" >
  1346. <span>{editFws.commodityName}</span>
  1347. </FormItem>
  1348. <FormItem className="half-item"
  1349. {...formItemLayout}
  1350. label="市场价格" >
  1351. <span>{editFws.commodityPrice+'万元'}</span>
  1352. </FormItem>
  1353. <FormItem className="half-item"
  1354. {...formItemLayout}
  1355. label="市场首付金额" >
  1356. <span>{editFws.commodityFirstPayment+'万元'}</span>
  1357. </FormItem>
  1358. {this.state.active.applySign?<FormItem className="half-item"
  1359. {...formItemLayout}
  1360. label="实签价格(万元)" >
  1361. <Input placeholder="请输入签单首付金额" value={this.state.discountPrice} style={{width:'200px'}}
  1362. onChange={(e)=>{this.setState({discountPrice:e.target.value})}} />
  1363. <span className="mandatory">*</span>
  1364. </FormItem>:
  1365. <FormItem className="half-item"
  1366. {...formItemLayout}
  1367. label="实签价格" >
  1368. <span>{this.state.discountPrice+'万元'}</span>
  1369. </FormItem>}
  1370. <FormItem className="half-item"
  1371. {...formItemLayout}
  1372. label="服务数量" >
  1373. <span>{editFws.commodityQuantity}</span>
  1374. </FormItem>
  1375. {this.state.active.applySign?<FormItem className="half-item"
  1376. {...formItemLayout}
  1377. label="签单首付金额(万元)" >
  1378. <Input placeholder="请输入签单首付金额" value={this.state.discountFirstPayment} style={{width:'200px'}}
  1379. onChange={(e)=>{this.setState({discountFirstPayment:e.target.value})}} />
  1380. <span className="mandatory">*</span>
  1381. </FormItem>:
  1382. <FormItem className="half-item"
  1383. {...formItemLayout}
  1384. label="签单首付金额" >
  1385. <span>{this.state.discountFirstPayment+'万元'}</span>
  1386. </FormItem>}
  1387. <div className='clearfix'>
  1388. <FormItem
  1389. labelCol={{ span: 4 }}
  1390. wrapperCol={{ span: 16 }}
  1391. label="服务说明" >
  1392. <span>{editFws.remarks}</span>
  1393. </FormItem>
  1394. </div>
  1395. {this.state.active.applySign&&<FormItem wrapperCol={{ span: 12, offset: 4 }} className="half-middle">
  1396. <Button className="submitSave" type="primary" onClick={this.tabRowSave}>保存</Button>
  1397. <Button className="submitSave" type="ghost" onClick={this.nextCancel}>取消</Button>
  1398. </FormItem>}
  1399. </div>}
  1400. </Spin>
  1401. </Form >
  1402. </Modal>
  1403. <Modal maskClosable={false} visible={this.state.signBillVisible}
  1404. onOk={this.signBillOk} onCancel={this.signBillOk}
  1405. width='800px'
  1406. title='签单信息'
  1407. footer=''
  1408. className="admin-desc-content">
  1409. <Form layout="horizontal" onSubmit={this.signOk} id="demand-form">
  1410. <Spin spinning={this.state.loading}>
  1411. <div className="clearfix">
  1412. <FormItem className="half-item"
  1413. {...formItemLayout}
  1414. label="订单编号" >
  1415. <span>{this.state.orderNo}</span>
  1416. </FormItem>
  1417. <FormItem className="half-item"
  1418. {...formItemLayout}
  1419. label="客户名称" >
  1420. <span>{this.state.buyerName}</span>
  1421. </FormItem>
  1422. <FormItem className="half-item"
  1423. {...formItemLayout}
  1424. label="实签款项(万元)" >
  1425. <Input placeholder="请输入实签款项" value={this.state.signTotalAmount} style={{width:'200px'}}
  1426. onChange={(e)=>{this.setState({signTotalAmount:e.target.value})}} />
  1427. <span className="mandatory">*</span>
  1428. </FormItem>
  1429. <FormItem className="half-item"
  1430. {...formItemLayout}
  1431. label="实签首款(万元)" >
  1432. <Input placeholder="请输入实签首款" value={this.state.signFirstPayment} style={{width:'200px'}}
  1433. onChange={(e)=>{this.setState({signFirstPayment:e.target.value})}} />
  1434. <span className="mandatory">*</span>
  1435. </FormItem>
  1436. <FormItem className="half-item"
  1437. {...formItemLayout}
  1438. label="特批立项" >
  1439. <Select placeholder="选择特批立项类型"
  1440. style={{ width:'200px'}}
  1441. value={this.state.approval}
  1442. onChange={(e) => { this.setState({ approval: e }) }}>
  1443. <Select.Option value='0'>不申请特批</Select.Option>
  1444. <Select.Option value='1'>申请特批</Select.Option>
  1445. </Select>
  1446. <span className="mandatory">*</span>
  1447. </FormItem>
  1448. <FormItem className="half-item"
  1449. {...formItemLayout}
  1450. label="合同编号" >
  1451. <Input placeholder="请输入合同编号" value={this.state.contractNo}
  1452. onChange={(e)=>{this.setState({contractNo:e.target.value})}} style={{width:'200px'}} />
  1453. <span className="mandatory">*</span>
  1454. </FormItem>
  1455. <div className='clearfix'>
  1456. <FormItem
  1457. labelCol={{ span: 4 }}
  1458. wrapperCol={{ span: 16 }}
  1459. label="签单备注" >
  1460. <Input type="textarea" placeholder="请输入签单备注" rows={4} value={this.state.orderRemarks}
  1461. onChange={(e)=>{this.setState({orderRemarks:e.target.value})}}/>
  1462. </FormItem>
  1463. </div>
  1464. <div className='clearfix'>
  1465. <FormItem
  1466. labelCol={{ span: 4 }}
  1467. wrapperCol={{ span: 18 }}
  1468. label="合同扫描件" >
  1469. <PicturesWall
  1470. listType="picture-card"
  1471. fileList={this.getOrgCodeUrl}
  1472. pictureUrl={this.state.orgCodeUrl} />
  1473. <p>图片建议:要清晰。</p>
  1474. </FormItem>
  1475. </div>
  1476. </div>
  1477. <FormItem wrapperCol={{ span: 12, offset: 4 }} className="half-middle">
  1478. <Button className="submitSave" type="primary" htmlType="submit">确定签单</Button>
  1479. <Button className="submitSave" type="ghost" onClick={this.signBillOk}>返回</Button>
  1480. </FormItem>
  1481. </Spin>
  1482. </Form >
  1483. </Modal>
  1484. <Modal maskClosable={false} visible={this.state.signVisible}
  1485. onOk={this.signBittOk} onCancel={this.signBittOk}
  1486. width='600px'
  1487. title='签单信息'
  1488. footer=''
  1489. className="admin-desc-content">
  1490. <Form layout="horizontal" onSubmit={this.signSub} id="demand-form">
  1491. <Spin spinning={this.state.loading}>
  1492. <div className="clearfix">
  1493. <FormItem
  1494. {...formItemLayout}
  1495. label="特批立项" >
  1496. <Select placeholder="选择特批立项类型"
  1497. style={{ width:'200px'}}
  1498. value={this.state.approval}
  1499. onChange={(e) => { this.setState({ approval: e }) }}>
  1500. <Select.Option value='0'>不申请特批</Select.Option>
  1501. <Select.Option value='1'>申请特批</Select.Option>
  1502. </Select>
  1503. <span className="mandatory">*</span>
  1504. </FormItem>
  1505. </div>
  1506. <FormItem wrapperCol={{ span: 12, offset: 4 }} className="half-middle">
  1507. <Button className="submitSave" type="primary" htmlType="submit">确定签单</Button>
  1508. <Button className="submitSave" type="ghost" onClick={this.signBittOk}>返回</Button>
  1509. </FormItem>
  1510. </Spin>
  1511. </Form >
  1512. </Modal>
  1513. <Modal maskClosable={false} visible={this.state.lookVisible}
  1514. onOk={this.lookCancel} onCancel={this.lookCancel}
  1515. width='1300px'
  1516. title= '查看流水'
  1517. footer=''
  1518. className="admin-desc-content">
  1519. <Form layout="horizontal" id="demand-form">
  1520. <Spin spinning={this.state.loading}>
  1521. <div className="clearfix">
  1522. <Table columns={this.state.flowList}
  1523. dataSource={this.state.lookflowList}
  1524. pagination={false}
  1525. />
  1526. </div>
  1527. </Spin>
  1528. </Form >
  1529. </Modal>
  1530. </div>
  1531. )
  1532. }
  1533. }));
  1534. export default NewService;