addService.jsx 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185
  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} from '../../../../tools.js';
  8. const Option = AutoComplete.Option;
  9. const NewService = Form.create()(React.createClass({
  10. loadData(record) {
  11. this.state.data = [];
  12. this.setState({
  13. loading: true
  14. });
  15. $.ajax({
  16. method: "get",
  17. dataType: "json",
  18. crossDomain: false,
  19. url: globalConfig.context + '/api/admin/order/getOrderCommodity',
  20. data: {
  21. orderNo:record?record.orderNo:this.props.datauser.orderNo
  22. },
  23. success: function (data) {
  24. let theArr = [];
  25. if (!data.data) {
  26. if (data.error && data.error.length) {
  27. message.warning(data.error[0].message);
  28. };
  29. } else {
  30. for (let i = 0; i < data.data.length; i++) {
  31. let thisdata = data.data[i];
  32. theArr.push({
  33. key: i,
  34. id:thisdata.id,
  35. orderNo:thisdata.orderNo,
  36. commodityName:thisdata.commodityName,
  37. commodityType:thisdata.commodityType,
  38. commodityMode:thisdata.commodityMode,
  39. commodityQuantity:thisdata.commodityQuantity,
  40. commodityPrice:thisdata.commodityPrice,
  41. discountPrice:thisdata.discountPrice,
  42. commodityFirstPayment:thisdata.commodityFirstPayment,
  43. createTimes:thisdata.createTimes,
  44. discountFirstPayment:thisdata.discountFirstPayment,
  45. remarks:thisdata.remarks,
  46. });
  47. };
  48. }
  49. this.setState({
  50. dataSource: theArr,
  51. pagination: false,
  52. });
  53. }.bind(this),
  54. }).always(function () {
  55. this.setState({
  56. loading: false
  57. });
  58. }.bind(this));
  59. },
  60. getInitialState() {
  61. return {
  62. loading: false,
  63. visible: false,
  64. orgCodeUrl:[],
  65. lookState:false,
  66. checkedKeys: [],
  67. lookflowList:[],
  68. editFw:[],
  69. signBillVisible:false,
  70. commod:'',
  71. columns: [
  72. {
  73. title: '业务项目名称',
  74. dataIndex: 'commodityName',
  75. key: 'commodityName'
  76. }, {
  77. title: '项目类别',
  78. dataIndex: 'commodityType',
  79. key: 'commodityType',
  80. render:(text)=>{
  81. return (getOrderType(text))
  82. }
  83. },{
  84. title: '项目数量',
  85. dataIndex: 'commodityQuantity',
  86. key: 'commodityQuantity'
  87. }, {
  88. title: '服务市价(万元)',
  89. dataIndex: 'commodityPrice',
  90. key: 'commodityPrice'
  91. }, {
  92. title: '实签价格(万元)',
  93. dataIndex: 'discountPrice',
  94. key: 'discountPrice'
  95. }, {
  96. title: '下单时间',
  97. dataIndex: 'createTimes',
  98. key: 'createTimes'
  99. }, {
  100. title: '项目说明',
  101. dataIndex: 'remarks',
  102. key: 'remarks',
  103. render:(text)=>{
  104. return (text&&text.length>8?text.substr(0,8)+'…':text)
  105. }
  106. }, {
  107. title: '操作',
  108. dataIndex: 'ABC',
  109. key: 'ABC',
  110. render: (text, record, index) => {
  111. return <div style={{display:this.props.datauser.active.applySign?'block':'none'}}>
  112. <Popconfirm title="是否删除?" onConfirm={(e)=>{this.delectRow(record)}} okText="是" cancelText="否">
  113. <Button onClick={(e) =>{ e.stopPropagation()}} type="danger">删除</Button>
  114. </Popconfirm>
  115. </div>
  116. }
  117. },
  118. ],
  119. flowList:[
  120. {
  121. title: '平台流水号',
  122. dataIndex: 'billNo',
  123. key: 'billNo',
  124. }, {
  125. title: '平台流水时间',
  126. dataIndex: 'createTime',
  127. key: 'createTime'
  128. }, {
  129. title: '流水金额(万元)',
  130. dataIndex: 'transactionAmount',
  131. key: 'transactionAmount'
  132. },{
  133. title: '付款人名称',
  134. dataIndex: 'payerName',
  135. key: 'payerName'
  136. }, {
  137. title: '收款人名称',
  138. dataIndex: 'payeeName',
  139. key: 'payeeName'
  140. },
  141. {
  142. title: '流水科目',
  143. dataIndex: 'transactionSubject',
  144. key: 'transactionSubject',
  145. render:(text)=>{return getTransactionProject(text) }
  146. }, {
  147. title: '流水渠道',
  148. dataIndex: 'transactionChannel',
  149. key: 'transactionChannel',
  150. render:(text)=>{return getTransactionChannel(text) }
  151. },{
  152. title: '财务流水号',
  153. dataIndex: 'financialPayNo',
  154. key: 'financialPayNo',
  155. }, {
  156. title: '财务流水时间',
  157. dataIndex: 'financialPayTime',
  158. key: 'financialPayTime',
  159. }, {
  160. title: '流水确认',
  161. dataIndex: 'confirmSign',
  162. key: 'confirmSign',
  163. render:(text)=>{return text?'已确认':'待确认' }
  164. },{
  165. title: '确认时间',
  166. dataIndex: 'confirmTime',
  167. key: 'confirmTime',
  168. }
  169. ]
  170. };
  171. },
  172. //新建订单、编辑订单保存
  173. handleSubmit(e) {
  174. e.preventDefault();
  175. if(this.props.userDetaile){
  176. if(!this.state.signTotalAmount){
  177. message.warning('请输入实签订单金额!');
  178. this.refs.signFirstPayment.focus()
  179. return false;
  180. };
  181. if(!this.state.signFirstPayment){
  182. message.warning('实签首款金额不能为空');
  183. this.refs.signFirstPayment.focus()
  184. return false;
  185. };
  186. }else{
  187. if(this.state.orderType==undefined){
  188. message.warning('请选择订单类型');
  189. return false;
  190. }
  191. if(this.state.autoId==undefined||!this.state.autoId){
  192. message.warning('客户名称不匹配');
  193. return false;
  194. };
  195. }
  196. this.props.form.validateFields((err, values) => {
  197. if(!err) {
  198. this.setState({
  199. loading: true
  200. });
  201. let api=this.props.userDetaile?'/api/admin/order/updateServiceOrder':'/api/admin/order/createOrder';
  202. $.ajax({
  203. method: "POST",
  204. dataType: "json",
  205. crossDomain: false,
  206. url: globalConfig.context + api,
  207. data: !this.props.userDetaile?{
  208. uid:this.state.autoId,
  209. orderType:this.state.orderType
  210. }:{
  211. orderNo:this.props.datauser.orderNo,
  212. // firstPayment:this.state.firstPayment,
  213. // orderAmount:this.state.orderAmount,
  214. signTotalAmount:this.state.signTotalAmount,
  215. signFirstPayment:this.state.signFirstPayment,
  216. orderRemarks:this.state.orderRemarks,
  217. contractNo:this.state.contractNo
  218. }
  219. }).done(function(data) {
  220. this.setState({
  221. loading: false
  222. });
  223. if(!data.error.length) {
  224. message.success('保存成功!');
  225. this.handleOk()
  226. } else {
  227. message.warning(data.error[0].message);
  228. }
  229. }.bind(this));
  230. }
  231. });
  232. },
  233. //查看基本详情基本信息
  234. loaduser(record){
  235. if(record){
  236. this.state.orderList=[]
  237. $.ajax({
  238. method: "get",
  239. dataType: "json",
  240. crossDomain: false,
  241. url: globalConfig.context + '/api/admin/order/getServiceOrderDetail',
  242. data: {
  243. orderNo: record.orderNo
  244. },
  245. success: function (data) {
  246. let thisData = data.data;
  247. if (!thisData) {
  248. if (data.error && data.error.length) {
  249. message.warning(data.error[0].message);
  250. };
  251. thisData = {};
  252. };
  253. this.setState({
  254. id:thisData.id,
  255. orderList:thisData,
  256. orderAmount:thisData.orderAmount,
  257. firstPayment:thisData.firstPayment,
  258. signTotalAmount:thisData.signTotalAmount,
  259. signFirstPayment:thisData.signFirstPayment,
  260. approval:thisData.approval==0?thisData.approval.toString():thisData.approval,
  261. orderRemarks:thisData.orderRemarks,
  262. orgCodeUrl: thisData.contractPictureUrl ? splitUrl(thisData.contractPictureUrl, ',', globalConfig.avatarHost + '/upload') : [],
  263. //签单
  264. orderNo:thisData.orderNo,//订单编号
  265. buyerName:thisData.buyerName,
  266. contractNo:thisData.contractNo
  267. });
  268. }.bind(this),
  269. }).always(function () {
  270. this.setState({
  271. loading: false
  272. });
  273. }.bind(this));
  274. }
  275. },
  276. handleOk(e) {
  277. this.setState({
  278. visible: false,
  279. });
  280. this.props.closeDesc(false, true);
  281. },
  282. handleCancel(e) {
  283. this.setState({
  284. visible: false,
  285. });
  286. this.props.closeDesc(false);
  287. },
  288. //删除
  289. delectRow(record) {
  290. this.setState({
  291. loading: true
  292. });
  293. $.ajax({
  294. method: "get",
  295. dataType: "json",
  296. crossDomain: false,
  297. url: globalConfig.context + "/api/admin/order/deleteOrderCommodity",
  298. data: {
  299. detailId:record.id
  300. }
  301. }).done(function (data) {
  302. if (!data.error.length) {
  303. message.success('删除成功!');
  304. this.setState({
  305. loading: false,
  306. });
  307. } else {
  308. message.warning(data.error[0].message);
  309. };
  310. this.loadData();
  311. }.bind(this));
  312. },
  313. //添加明细
  314. addDetailed(){
  315. this.setState({
  316. customerArr:[],
  317. commodityName:'',
  318. commodityId:'',
  319. commodityMode:'',
  320. commodityQuantity:'',
  321. commodityPrice:'',
  322. discountPrice:'',
  323. commodityFirstPayment:'',
  324. discountFirstPayment:'',
  325. remarks:'',
  326. addState:1,
  327. addnextVisible: true
  328. })
  329. },
  330. nextCancel() {
  331. this.setState({
  332. addnextVisible: false
  333. })
  334. },
  335. tableRowClick(record, index) {
  336. this.setState({
  337. editFw:record,
  338. addnextVisible:true,
  339. addState:0,
  340. });
  341. },
  342. componentWillMount() {
  343. },
  344. //查看订单详情里面的各种骚操作
  345. //受理订单
  346. admissibleOrderOK(){
  347. let idArr=this.props.datauser;
  348. this.props.admissibleOrder(idArr,true)
  349. },
  350. //拒绝受理
  351. admissibleOrderCancel(){
  352. let idArr=this.props.datauser;
  353. this.props.admissibleOrder(idArr,false)
  354. },
  355. //取消订单
  356. cancelOrder(){
  357. let idArr=this.props.datauser;
  358. this.props.operation(idArr,3)
  359. },
  360. //作废订单
  361. scrapOrder(){
  362. let idArr=this.props.datauser;
  363. this.props.operation(idArr,2)
  364. },
  365. //锁定订单
  366. lockOrder(){
  367. let idArr=this.props.datauser;
  368. this.props.operation(idArr,0)
  369. },
  370. //解锁订单
  371. unlockOrder(){
  372. let idArr=this.props.datauser;
  373. this.props.operation(idArr,1)
  374. },
  375. //签单
  376. signBitt(){
  377. this.setState({
  378. contractNo:this.state.contractNo,
  379. signVisible:true
  380. })
  381. },
  382. signBittOk(){
  383. this.setState({
  384. signVisible:false
  385. })
  386. },
  387. signBillOk(){
  388. this.setState({
  389. signBillVisible:false
  390. })
  391. },
  392. signBillCancel(e) {
  393. this.setState({
  394. signVisible:false,
  395. signBillVisible: false,
  396. });
  397. this.props.closeDesc(false, true);
  398. },
  399. //加载(自动补全)
  400. supervisor(e,state){ //客户名称与服务名称自动补全
  401. let api=state?'/api/admin/customer/findCustomerByName':'/api/admin/order/getBusinessProjectByName';
  402. $.ajax({
  403. method: "get",
  404. dataType: "json",
  405. crossDomain: false,
  406. url: globalConfig.context + api,
  407. data:state?{
  408. name:e
  409. }:{
  410. businessName:e
  411. },
  412. success: function (data) {
  413. let thedata=data.data;
  414. if (!thedata) {
  415. if (data.error && data.error.length) {
  416. message.warning(data.error[0].message);
  417. };
  418. thedata = {};
  419. };
  420. this.setState({
  421. states:state,
  422. customerArr:thedata,
  423. });
  424. }.bind(this),
  425. }).always(function () {
  426. this.setState({
  427. loading: false
  428. });
  429. }.bind(this));
  430. },
  431. //上级主管输入框失去焦点是判断客户是否存在
  432. selectAuto(value,options){
  433. let kid=[];
  434. let fwList=this.state.customerArr;
  435. fwList.map(function(item){
  436. if(value==item.bname){
  437. kid=item
  438. }
  439. })
  440. this.setState({
  441. commodityName:value,
  442. gid:kid.id,
  443. commodityPrice:kid.price==0?kid.price.toString():kid.price,
  444. commodityFirstPayment:kid.firstPayment==0?kid.firstPayment.toString():kid.firstPayment
  445. })
  446. },
  447. //服务值改变时请求客户名称
  448. httpChange(e){
  449. this.state.gid='';
  450. if(e.length>=1){
  451. this.supervisor(e,false);
  452. }
  453. this.setState({
  454. commodityName:e
  455. })
  456. },
  457. //新建明细保存
  458. nextSubmit(e) {
  459. e.preventDefault();
  460. if(this.state.gid==undefined||!this.state.gid){
  461. message.warning('服务名称不匹配!');
  462. return false;
  463. };
  464. if(!this.state.commodityPrice){
  465. message.warning('请输入市场价格!');
  466. this.refs.commodityPrice.focus();
  467. return false;
  468. };
  469. if(!this.state.discountPrice){
  470. message.warning('请输入实签价格!');
  471. this.refs.discountPrice.focus();
  472. return false;
  473. };
  474. if(!this.state.commodityQuantity){
  475. message.warning('请输入商品数量!');
  476. this.refs.commodityQuantity.focus();
  477. return false;
  478. };
  479. if(!this.state.commodityFirstPayment){
  480. message.warning('请输入市场首付金额!');
  481. this.refs.commodityFirstPayment.focus();
  482. return false;
  483. };
  484. if(!this.state.discountFirstPayment){
  485. message.warning('请输入签单首付金额!');
  486. this.refs.discountFirstPayment.focus();
  487. return false;
  488. };
  489. this.setState({
  490. loading: true
  491. });
  492. let api=this.state.addState?'/api/admin/order/addOrderCommodity':'/api/bianji';
  493. $.ajax({
  494. method: "POST",
  495. dataType: "json",
  496. crossDomain: false,
  497. url: globalConfig.context +api ,
  498. data: {
  499. commodityId:this.state.gid,
  500. orderNo:this.props.datauser.orderNo,
  501. commodityName:this.state.commodityName,//商品名称
  502. commodityMode:this.state.commodityMode,//商品规格
  503. commodityQuantity:this.state.commodityQuantity,//商品数量
  504. commodityType:0,//商品类型
  505. commodityPrice:this.state.commodityPrice,//市场总价
  506. discountPrice:this.state.discountPrice,//签单总价
  507. commodityFirstPayment:this.state.commodityFirstPayment,//市场首付金额
  508. discountFirstPayment:this.state.discountFirstPayment,//签单首付金额
  509. remarks:this.state.remarks,//服务说明
  510. }
  511. }).done(function(data) {
  512. this.setState({
  513. loading: false
  514. });
  515. if(!data.error.length) {
  516. message.success('保存成功!');
  517. this.nextCancel()
  518. this.loaduser(this.props.datauser);
  519. this.loadData();
  520. } else {
  521. message.warning(data.error[0].message);
  522. }
  523. }.bind(this));
  524. },
  525. //签单保存
  526. signOk(e){
  527. e.preventDefault();
  528. this.temporarySave(false)
  529. },
  530. //暂存信息
  531. temporary(){
  532. this.temporarySave(true)
  533. },
  534. signSub(e){
  535. e.preventDefault();
  536. this.setState({
  537. loading: true
  538. });
  539. $.ajax({
  540. method: "POST",
  541. dataType: "json",
  542. crossDomain: false,
  543. url: globalConfig.context +'/api/admin/order/signServiceOrder' ,
  544. data: {
  545. orderNo:this.props.datauser.orderNo,
  546. signTotalAmount:this.state.signTotalAmount,
  547. signFirstPayment:this.state.signFirstPayment,
  548. approval:this.state.approval,
  549. orderRemarks:this.state.orderRemarks,
  550. contractNo:this.state.contractNo
  551. }
  552. }).done(function(data) {
  553. this.setState({
  554. loading: false
  555. });
  556. if(!data.error.length) {
  557. message.success('操作成功!');
  558. this.signBillCancel()
  559. } else {
  560. message.warning(data.error[0].message);
  561. }
  562. }.bind(this));
  563. },
  564. //签单保存与暂存函数
  565. temporarySave(e){
  566. if(!this.state.signTotalAmount){
  567. message.warning('实签款项不能为空!')
  568. return false;
  569. };
  570. if(!this.state.signTotalAmount){
  571. message.warning('实签首款不能为空!')
  572. return false;
  573. };
  574. if(this.state.approval==undefined){
  575. message.warning('实签首款不能为空!')
  576. return false;
  577. };
  578. if(!this.state.contractNo){
  579. message.warning("请输入合同编号!");
  580. return false;
  581. }
  582. this.setState({
  583. loading: true
  584. });
  585. let api=e?'/api/admin/order/updateServiceOrder':'/api/admin/order/signServiceOrder';
  586. $.ajax({
  587. method: "POST",
  588. dataType: "json",
  589. crossDomain: false,
  590. url: globalConfig.context +api ,
  591. data: {
  592. orderNo:this.props.uid?this.props.uid.orderNo:this.props.datauser.orderNo,
  593. signTotalAmount:this.state.signTotalAmount,
  594. signFirstPayment:this.state.signFirstPayment,
  595. approval:this.state.approval,
  596. orderRemarks:this.state.orderRemarks,
  597. contractNo:this.state.contractNo
  598. }
  599. }).done(function(data) {
  600. this.setState({
  601. loading: false
  602. });
  603. if(!data.error.length) {
  604. message.success('操作成功!');
  605. this.signBillCancel()
  606. } else {
  607. message.warning(data.error[0].message);
  608. }
  609. }.bind(this));
  610. },
  611. lookflow(){
  612. this.setState({
  613. loading: true,
  614. lookVisible:true,
  615. })
  616. this.state.lookSource=[];
  617. $.ajax({
  618. method: "get",
  619. dataType: "json",
  620. crossDomain: false,
  621. url: globalConfig.context +'/api/admin/order/getBillByOrderNo',
  622. data: {
  623. orderNo:this.props.datauser.orderNo,
  624. },
  625. success: function (data) {
  626. let theArr = [];
  627. if (!data.data) {
  628. if (data.error && data.error.length) {
  629. message.warning(data.error[0].message);
  630. };
  631. } else {
  632. for (let i = 0; i < data.data.length; i++) {
  633. let thisdata = data.data[i];
  634. theArr.push({
  635. key: i,
  636. billNo: thisdata.billNo,
  637. transactionAmount:thisdata.transactionAmount,
  638. createTime:thisdata.createTime,
  639. transactionAmount:thisdata.transactionAmount,
  640. payerName:thisdata.payerName,
  641. payeeName:thisdata.payeeName,
  642. transactionSubject:thisdata.transactionSubject,
  643. transactionChannel:thisdata.transactionChannel,
  644. financialPayNo:thisdata.financialPayNo,
  645. financialPayTime:thisdata.financialPayTime,
  646. orderNo:thisdata.orderNo,
  647. departmentName:thisdata.departmentName,
  648. salesmanName:thisdata.salesmanName,
  649. financeName:thisdata.financeName,
  650. confirmSign:thisdata.confirmSign,
  651. deleteSign:thisdata.deleteSign,
  652. confirmTime:thisdata.confirmTime
  653. });
  654. };
  655. };
  656. this.setState({
  657. lookflowList: theArr,
  658. });
  659. }.bind(this),
  660. }).always(function () {
  661. this.setState({
  662. loading: false
  663. });
  664. }.bind(this));
  665. },
  666. lookCancel(){
  667. this.setState({
  668. lookVisible:false
  669. })
  670. },
  671. componentWillReceiveProps(nextProps) { //props改变时触发
  672. this.state.visible = nextProps.showDesc;
  673. this.state.signBillVisible=nextProps.signBillVisible;
  674. if(this.state.signBillVisible){
  675. this.loaduser(nextProps.uid)
  676. };
  677. if(nextProps.userDetaile && nextProps.showDesc) {
  678. this.loaduser(nextProps.datauser);
  679. this.loadData(nextProps.datauser);
  680. }else{
  681. this.setState({
  682. orderType:undefined,
  683. customerName:'',
  684. autoId:'',
  685. customerArr:[]
  686. })
  687. }
  688. },
  689. render() {
  690. const FormItem = Form.Item
  691. const formItemLayout = {
  692. labelCol: { span: 8 },
  693. wrapperCol: { span: 14 },
  694. };
  695. const editFws=this.state.editFw;
  696. const orderDetaiel=this.state.orderList || []
  697. const dataSources=this.state.customerArr || [];
  698. const options = this.state.states?dataSources.map((group,index) =>
  699. <Select.Option key={index} value={group.name}>{group.name}</Select.Option>
  700. ):dataSources.map((group,index) =>
  701. <Select.Option key={group.id} value={group.bname}>{group.bname}</Select.Option>
  702. )
  703. return(
  704. <div>
  705. <Modal maskClosable={false} visible={this.state.visible}
  706. onOk={this.handleOk} onCancel={this.handleCancel}
  707. width={!this.props.userDetaile?'600px':'1000px'}
  708. title={!this.props.userDetaile?'创建订单':'编辑订单'}
  709. footer=''
  710. className="admin-desc-content">
  711. <Form layout="horizontal" onSubmit={this.handleSubmit} id="demand-form" style={{paddingBottom:'40px'}} >
  712. <Spin spinning={this.state.loading}>
  713. <div className="clearfix">
  714. {!this.props.userDetaile?<div></div>:
  715. <div className="clearfix">
  716. <FormItem className="half-item"
  717. {...formItemLayout}
  718. label="订单编号" >
  719. <span>{orderDetaiel.orderNo}</span>
  720. </FormItem>
  721. <FormItem className="half-item"
  722. {...formItemLayout}
  723. label="下单时间" >
  724. <span>{orderDetaiel.createTime}</span>
  725. </FormItem>
  726. <FormItem className="half-item"
  727. {...formItemLayout}
  728. label="客户名称" >
  729. <span>{orderDetaiel.buyerName}</span>
  730. </FormItem>
  731. <FormItem className="half-item"
  732. {...formItemLayout}
  733. label="订单类型" >
  734. <span>{getOrderType(orderDetaiel.orderType)}</span>
  735. </FormItem>
  736. <FormItem className="half-item"
  737. {...formItemLayout}
  738. label="订单渠道" >
  739. <span>{getOrderChannel(orderDetaiel.orderChannel)}</span>
  740. </FormItem>
  741. <FormItem className="half-item"
  742. {...formItemLayout}
  743. label="订单状态" >
  744. <span>{getOrderState(orderDetaiel.orderStatus)}</span>
  745. </FormItem>
  746. <FormItem className="half-item"
  747. {...formItemLayout}
  748. label="已收款项" >
  749. <span>{orderDetaiel.actuallyTotalAmount+'万元'}</span>
  750. </FormItem>
  751. <FormItem className="half-item"
  752. {...formItemLayout}
  753. label="结算状态" >
  754. <span>{getPaymentState(orderDetaiel.liquidationStatus)}</span>
  755. </FormItem>
  756. <FormItem className="half-item"
  757. {...formItemLayout}
  758. label="市价订单金额" >
  759. <span>{orderDetaiel.orderAmount+'万元'}</span>
  760. </FormItem>
  761. <FormItem className="half-item"
  762. {...formItemLayout}
  763. label="市价首款金额" >
  764. <span>{orderDetaiel.firstPayment+'万元'}</span>
  765. </FormItem>
  766. {orderDetaiel.deleteSign==0&&orderDetaiel.orderStatus==2?
  767. <div className='clearfix'>
  768. <FormItem className="half-item"
  769. {...formItemLayout}
  770. label="实签订单金额(万元)" >
  771. <Input placeholder="实签订单金额" ref='signTotalAmount' value={this.state.signTotalAmount} onChange={(e)=>{this.setState({signTotalAmount:e.target.value})}} style={{width:'240px'}} />
  772. <span className="mandatory">*</span>
  773. </FormItem>
  774. <FormItem className="half-item"
  775. {...formItemLayout}
  776. label="实签首款金额(万元)" >
  777. <Input placeholder="请输入实签首款金额" ref='signFirstPayment' value={this.state.signFirstPayment} onChange={(e)=>{this.setState({signFirstPayment:e.target.value})}} style={{width:'240px'}} />
  778. <span className="mandatory">*</span>
  779. </FormItem>
  780. <FormItem className="half-item"
  781. {...formItemLayout}
  782. label="特批立项" >
  783. <span>{getApprovedState(this.state.approval)}</span>
  784. </FormItem>
  785. <FormItem className="half-item"
  786. {...formItemLayout}
  787. label="合同编号" >
  788. <Input placeholder="请输入合同编号" value={this.state.contractNo}
  789. onChange={(e)=>{this.setState({contractNo:e.target.value})}} style={{width:'240px'}} />
  790. </FormItem>
  791. <div className='clearfix'>
  792. <FormItem
  793. labelCol={{ span: 4 }}
  794. wrapperCol={{ span: 16 }}
  795. label="订单留言" >
  796. <Input type="textarea" placeholder="请输入订单留言" rows={4} value={this.state.orderRemarks}
  797. onChange={(e)=>{this.setState({orderRemarks:e.target.value})}}/>
  798. </FormItem>
  799. </div>
  800. </div>:
  801. <div className='clearfix'>
  802. <FormItem className="half-item"
  803. {...formItemLayout}
  804. label="实签订单金额" >
  805. <span>{orderDetaiel.signTotalAmount+'万元'}</span>
  806. </FormItem>
  807. <FormItem className="half-item"
  808. {...formItemLayout}
  809. label="实签首款金额" >
  810. <span>{orderDetaiel.signFirstPayment+'万元'}</span>
  811. </FormItem>
  812. <FormItem className="half-item"
  813. {...formItemLayout}
  814. label="特批立项" >
  815. <span>{getApprovedState(orderDetaiel.approval)}</span>
  816. </FormItem>
  817. <FormItem className="half-item"
  818. {...formItemLayout}
  819. label="合同编号" >
  820. <span>{orderDetaiel.contractNo}</span>
  821. </FormItem>
  822. <div className="clearfix">
  823. <FormItem
  824. labelCol={{ span: 4 }}
  825. wrapperCol={{ span: 18 }}
  826. label="合同扫描件" >
  827. <Upload className="demandDetailShow-upload"
  828. listType="customer_sys_file"
  829. fileList={this.state.orgCodeUrl}
  830. onPreview={(file) => {
  831. this.setState({
  832. previewImage: file.url || file.thumbUrl,
  833. previewVisible: true,
  834. });
  835. }} >
  836. </Upload>
  837. <Modal maskClosable={false} footer={null}
  838. visible={this.state.previewVisible}
  839. onCancel={() => { this.setState({ previewVisible: false }) }}>
  840. <img alt="" style={{ width: '100%' }} src={this.state.previewImage || ''} />
  841. </Modal>
  842. </FormItem>
  843. </div>
  844. <div className='clearfix'>
  845. <FormItem
  846. labelCol={{ span: 4 }}
  847. wrapperCol={{ span: 16 }}
  848. label="订单留言" >
  849. <span>{orderDetaiel.orderRemarks}</span>
  850. </FormItem>
  851. </div>
  852. </div>}
  853. <div className='clearfix'>
  854. <FormItem className="half-item"
  855. {...formItemLayout}
  856. label="订单负责人" >
  857. <span>{orderDetaiel.salesmanName}</span>
  858. </FormItem>
  859. <FormItem className="half-item"
  860. {...formItemLayout}
  861. label="业务品类" >
  862. <span>{orderDetaiel.projectType}</span>
  863. </FormItem>
  864. </div>
  865. <div className='clearfix'>
  866. <FormItem className="half-item"
  867. {...formItemLayout}
  868. label="意向时间" >
  869. <span>{orderDetaiel.createTime}</span>
  870. </FormItem>
  871. <FormItem className="half-item"
  872. {...formItemLayout}
  873. label="签单时间" >
  874. <span>{orderDetaiel.signTime}</span>
  875. </FormItem>
  876. <FormItem className="half-item"
  877. {...formItemLayout}
  878. label="财务负责人" >
  879. <span>{orderDetaiel.financeName}</span>
  880. <Button onClick={this.lookflow} style={{float:'right'}}>查看流水</Button>
  881. </FormItem>
  882. <FormItem className="half-item"
  883. {...formItemLayout}
  884. label="项目负责人" >
  885. <span>{orderDetaiel.technicianName}</span>
  886. </FormItem>
  887. <FormItem className="half-item"
  888. {...formItemLayout}
  889. label="立项时间" >
  890. <span>{orderDetaiel.setUpTime}</span>
  891. </FormItem>
  892. </div>
  893. <div>
  894. <span style={{marginLeft:'50px',fontSize:'20px'}}>项目业务</span>
  895. {this.props.datauser.active.applySign?<Button type='primary' onClick={this.addDetailed} style={{float:'right',marginRight:'50px',marginBottom:'15px',display:true?'block':'none'}}>添加明细</Button>:''}
  896. </div>
  897. <div className="patent-table">
  898. <Spin spinning={this.state.loading}>
  899. <Table columns={this.state.columns}
  900. dataSource={this.state.dataSource}
  901. pagination={this.state.pagination}
  902. onRowClick={this.tableRowClick}
  903. />
  904. </Spin>
  905. </div>
  906. </div>}
  907. <div className='addSave' style={{marginTop:'15px'}}>
  908. {!this.props.userDetaile||orderDetaiel.deleteSign==0&&orderDetaiel.orderStatus==2?<Button className="setSave" type="primary" htmlType="submit">保存</Button>:''}
  909. {this.props.userDetaile?<div className='operations'>
  910. {this.props.datauser.active.confirmIntention&&<Popconfirm title={'请确认您是否受理来自【'+this.props.datauser.buyerName+'】发起的服务意向订单?'} onConfirm={(e)=>{this.admissibleOrderOK()}} onCancel={(e)=>{this.admissibleOrderCancel()}} okText="同意" cancelText="拒绝">
  911. <Button style={{marginRight:'15px',marginLeft:'200px'}} type="primary">受理意向</Button>
  912. </Popconfirm>}
  913. {this.props.datauser.active.applySign&&<Button style={{marginRight:'10px'}} onClick={(e) =>{this.signBitt()}} type="primary">签单</Button>}
  914. {this.props.datauser.active.applyForCancel&&<Popconfirm title={'请确认您是否取消客户【'+this.props.datauser.buyerName+'】的服务订单,订单取消将导致业务终止!'} onConfirm={(e)=>{this.cancelOrder()}} okText="确认" cancelText="取消">
  915. <Button style={{marginRight:'10px'}} type="danger">取消订单</Button>
  916. </Popconfirm>}
  917. {this.props.datauser.active.applyRevoke&&<Popconfirm title={'请确认您是否作废客户【'+this.props.datauser.buyerName+'】的服务订单,订单作废将导致订单失效!'} onConfirm={(e)=>{this.scrapOrder()}} okText="确认" cancelText="取消">
  918. <Button style={{marginRight:'10px',marginLeft:'200px'}} type="danger">作废</Button>
  919. </Popconfirm>}
  920. {this.props.datauser.active.applyLock&&<Popconfirm title={'请确认您是否锁定客户【'+this.props.datauser.buyerName+'】的服务订单,订单锁定将导致订单暂停!'} onConfirm={(e)=>{this.lockOrder()}} okText="确认" cancelText="取消">
  921. <Button style={{marginRight:'10px',marginLeft:'200px'}} type="danger">锁定</Button>
  922. </Popconfirm>}
  923. {this.props.datauser.active.applyUnLock&&<Popconfirm title={'请确认您是否解锁客户【'+this.props.datauser.buyerName+'】的服务订单,订单解锁将导致订单正常!'} onConfirm={(e)=>{this.unlockOrder()}} okText="确认" cancelText="取消">
  924. <Button style={{marginRight:'10px',marginLeft:'200px'}} type="primary">解锁</Button>
  925. </Popconfirm>}
  926. </div>:''}
  927. <Button className="cancel" type="ghost" onClick={this.handleCancel} style={{float:'right',marginRight:'200px'}}>返回</Button>
  928. </div>
  929. </div>
  930. </Spin>
  931. </Form >
  932. </Modal>
  933. <Modal maskClosable={false} visible={this.state.addnextVisible}
  934. onOk={this.nextCancel} onCancel={this.nextCancel}
  935. width='800px'
  936. title={this.state.addState?'添加服务':'查看服务'}
  937. footer=''
  938. className="admin-desc-content">
  939. <Form layout="horizontal" onSubmit={this.nextSubmit} id="demand-form">
  940. <Spin spinning={this.state.loading}>
  941. {this.state.addState?<div className="clearfix">
  942. <FormItem className="half-item"
  943. {...formItemLayout}
  944. label="服务名称" >
  945. <AutoComplete
  946. className="certain-category-search"
  947. dropdownClassName="certain-category-search-dropdown"
  948. dropdownMatchSelectWidth={false}
  949. dropdownStyle={{ width: 200 }}
  950. style={{ width: '200px' }}
  951. dataSource={options}
  952. placeholder="输入服务名称"
  953. value={this.state.commodityName}
  954. onChange={this.httpChange}
  955. filterOption={true}
  956. onSelect={this.selectAuto}
  957. >
  958. <Input/>
  959. </AutoComplete>
  960. <span className="mandatory">*</span>
  961. </FormItem>
  962. <FormItem className="half-item"
  963. {...formItemLayout}
  964. label="市场价格(万元)" >
  965. <span>{this.state.commodityPrice}</span>
  966. </FormItem>
  967. <FormItem className="half-item"
  968. {...formItemLayout}
  969. label="实签价格(万元)" >
  970. <Input placeholder="请输入实签价格" value={this.state.discountPrice} style={{width:'200px'}}
  971. onChange={(e)=>{this.setState({discountPrice:e.target.value})}} ref="discountPrice"/>
  972. <span className="mandatory">*</span>
  973. </FormItem>
  974. <FormItem className="half-item"
  975. {...formItemLayout}
  976. label="服务数量" >
  977. <Input placeholder="请输入服务数量" value={this.state.commodityQuantity} style={{width:'200px'}}
  978. onChange={(e)=>{this.setState({commodityQuantity:e.target.value})}} ref="commodityQuantity"/>
  979. <span className="mandatory">*</span>
  980. </FormItem>
  981. <FormItem className="half-item"
  982. {...formItemLayout}
  983. label="市场首付金额(万元)" >
  984. <span>{this.state.commodityFirstPayment}</span>
  985. </FormItem>
  986. <FormItem className="half-item"
  987. {...formItemLayout}
  988. label="签单首付金额(万元)" >
  989. <Input placeholder="请输入签单首付金额" value={this.state.discountFirstPayment} style={{width:'200px'}}
  990. onChange={(e)=>{this.setState({discountFirstPayment:e.target.value})}} ref='discountFirstPayment'/>
  991. <span className="mandatory">*</span>
  992. </FormItem>
  993. <FormItem className="half-item"
  994. {...formItemLayout}
  995. label="商品规格" >
  996. <Input placeholder="请输入实签价格" value={this.state.commodityMode} style={{width:'200px'}}
  997. onChange={(e)=>{this.setState({commodityMode:e.target.value})}} />
  998. </FormItem>
  999. <div className='clearfix'>
  1000. <FormItem
  1001. labelCol={{ span: 4 }}
  1002. wrapperCol={{ span: 16 }}
  1003. label="服务说明" >
  1004. <Input type='textarea' placeholder="请输入服务说明" value={this.state.remarks}
  1005. onChange={(e)=>{this.setState({remarks:e.target.value})}} />
  1006. </FormItem>
  1007. </div>
  1008. <FormItem wrapperCol={{ span: 12, offset: 4 }} className="half-middle">
  1009. <Button className="submitSave" type="primary" htmlType="submit">保存</Button>
  1010. <Button className="submitSave" type="ghost" onClick={this.nextCancel}>取消</Button>
  1011. </FormItem>
  1012. </div>:
  1013. <div className='clearfix'>
  1014. <FormItem className="half-item"
  1015. {...formItemLayout}
  1016. label="服务名称" >
  1017. <span>{editFws.commodityName}</span>
  1018. </FormItem>
  1019. <FormItem className="half-item"
  1020. {...formItemLayout}
  1021. label="市场价格" >
  1022. <span>{editFws.commodityPrice}</span>
  1023. </FormItem>
  1024. <FormItem className="half-item"
  1025. {...formItemLayout}
  1026. label="实签价格" >
  1027. <span>{editFws.discountPrice+'万元'}</span>
  1028. </FormItem>
  1029. <FormItem className="half-item"
  1030. {...formItemLayout}
  1031. label="服务数量" >
  1032. <span>{editFws.commodityQuantity}</span>
  1033. </FormItem>
  1034. <FormItem className="half-item"
  1035. {...formItemLayout}
  1036. label="商品规格" >
  1037. <span>{editFws.commodityMode}</span>
  1038. </FormItem>
  1039. <FormItem className="half-item"
  1040. {...formItemLayout}
  1041. label="市场首付金额" >
  1042. <span>{editFws.commodityFirstPayment+'万元'}</span>
  1043. </FormItem>
  1044. <FormItem className="half-item"
  1045. {...formItemLayout}
  1046. label="签单首付金额" >
  1047. <span>{editFws.discountFirstPayment+'万元'}</span>
  1048. </FormItem>
  1049. <div className='clearfix'>
  1050. <FormItem
  1051. labelCol={{ span: 4 }}
  1052. wrapperCol={{ span: 16 }}
  1053. label="服务说明" >
  1054. <span>{editFws.remarks}</span>
  1055. </FormItem>
  1056. </div>
  1057. </div>}
  1058. </Spin>
  1059. </Form >
  1060. </Modal>
  1061. <Modal maskClosable={false} visible={this.state.signBillVisible}
  1062. onOk={this.signBillOk} onCancel={this.signBillOk}
  1063. width='800px'
  1064. title='签单信息'
  1065. footer=''
  1066. className="admin-desc-content">
  1067. <Form layout="horizontal" onSubmit={this.signOk} id="demand-form">
  1068. <Spin spinning={this.state.loading}>
  1069. <div className="clearfix">
  1070. <FormItem className="half-item"
  1071. {...formItemLayout}
  1072. label="订单编号" >
  1073. <span>{this.state.orderNo}</span>
  1074. </FormItem>
  1075. <FormItem className="half-item"
  1076. {...formItemLayout}
  1077. label="客户名称" >
  1078. <span>{this.state.buyerName}</span>
  1079. </FormItem>
  1080. <FormItem className="half-item"
  1081. {...formItemLayout}
  1082. label="实签款项(万元)" >
  1083. <Input placeholder="请输入实签款项" value={this.state.signTotalAmount} style={{width:'200px'}}
  1084. onChange={(e)=>{this.setState({signTotalAmount:e.target.value})}} />
  1085. <span className="mandatory">*</span>
  1086. </FormItem>
  1087. <FormItem className="half-item"
  1088. {...formItemLayout}
  1089. label="实签首款(万元)" >
  1090. <Input placeholder="请输入实签首款" value={this.state.signFirstPayment} style={{width:'200px'}}
  1091. onChange={(e)=>{this.setState({signFirstPayment:e.target.value})}} />
  1092. <span className="mandatory">*</span>
  1093. </FormItem>
  1094. <FormItem className="half-item"
  1095. {...formItemLayout}
  1096. label="特批立项" >
  1097. <Select placeholder="选择特批立项类型"
  1098. style={{ width:'200px'}}
  1099. value={this.state.approval}
  1100. onChange={(e) => { this.setState({ approval: e }) }}>
  1101. <Select.Option value='0'>不申请特批</Select.Option>
  1102. <Select.Option value='1'>申请特批</Select.Option>
  1103. </Select>
  1104. <span className="mandatory">*</span>
  1105. </FormItem>
  1106. <FormItem className="half-item"
  1107. {...formItemLayout}
  1108. label="合同编号" >
  1109. <Input placeholder="请输入合同编号" value={this.state.contractNo}
  1110. onChange={(e)=>{this.setState({contractNo:e.target.value})}} style={{width:'200px'}} />
  1111. <span className="mandatory">*</span>
  1112. </FormItem>
  1113. <div className='clearfix'>
  1114. <FormItem
  1115. labelCol={{ span: 4 }}
  1116. wrapperCol={{ span: 16 }}
  1117. label="签单备注" >
  1118. <Input type="textarea" placeholder="请输入签单备注" rows={4} value={this.state.orderRemarks}
  1119. onChange={(e)=>{this.setState({orderRemarks:e.target.value})}}/>
  1120. </FormItem>
  1121. </div>
  1122. </div>
  1123. <FormItem wrapperCol={{ span: 12, offset: 4 }} className="half-middle">
  1124. {/*<Button className="submitSave" type="primary" onClick={this.temporary}>暂存信息</Button>*/}
  1125. <Button className="submitSave" type="primary" htmlType="submit">确定签单</Button>
  1126. <Button className="submitSave" type="ghost" onClick={this.signBillOk}>返回</Button>
  1127. </FormItem>
  1128. </Spin>
  1129. </Form >
  1130. </Modal>
  1131. <Modal maskClosable={false} visible={this.state.signVisible}
  1132. onOk={this.signBittOk} onCancel={this.signBittOk}
  1133. width='600px'
  1134. title='签单信息'
  1135. footer=''
  1136. className="admin-desc-content">
  1137. <Form layout="horizontal" onSubmit={this.signSub} id="demand-form">
  1138. <Spin spinning={this.state.loading}>
  1139. <div className="clearfix">
  1140. <FormItem
  1141. {...formItemLayout}
  1142. label="特批立项" >
  1143. <Select placeholder="选择特批立项类型"
  1144. style={{ width:'200px'}}
  1145. value={this.state.approval}
  1146. onChange={(e) => { this.setState({ approval: e }) }}>
  1147. <Select.Option value='0'>不申请特批</Select.Option>
  1148. <Select.Option value='1'>申请特批</Select.Option>
  1149. </Select>
  1150. <span className="mandatory">*</span>
  1151. </FormItem>
  1152. </div>
  1153. <FormItem wrapperCol={{ span: 12, offset: 4 }} className="half-middle">
  1154. <Button className="submitSave" type="primary" htmlType="submit">确定签单</Button>
  1155. <Button className="submitSave" type="ghost" onClick={this.signBittOk}>返回</Button>
  1156. </FormItem>
  1157. </Spin>
  1158. </Form >
  1159. </Modal>
  1160. <Modal maskClosable={false} visible={this.state.lookVisible}
  1161. onOk={this.lookCancel} onCancel={this.lookCancel}
  1162. width='1300px'
  1163. title= '查看流水'
  1164. footer=''
  1165. className="admin-desc-content">
  1166. <Form layout="horizontal" id="demand-form">
  1167. <Spin spinning={this.state.loading}>
  1168. <div className="clearfix">
  1169. <Table columns={this.state.flowList}
  1170. dataSource={this.state.lookflowList}
  1171. pagination={false}
  1172. />
  1173. </div>
  1174. </Spin>
  1175. </Form >
  1176. </Modal>
  1177. </div>
  1178. )
  1179. }
  1180. }));
  1181. export default NewService;