checkOutsourcing.jsx 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181
  1. import React from 'react';
  2. import { Button, Input, Select, Spin, Table, message,DatePicker, Upload, Form ,Modal,Tabs,Col} from 'antd';
  3. import $ from 'jquery/src/ajax';
  4. import moment from 'moment';
  5. import { getLiquidationStatus,getApprovedState,getProcessStatus,splitUrl,getjiedian,getboutique,getCuikuan,getProjectStatus,getRefundStatus} from '@/tools.js';
  6. import './customer.less';
  7. const checkOutsourcing = Form.create()(React.createClass({
  8. loadData(pageNo) {
  9. this.setState({
  10. visitModul:false,
  11. loading: true,
  12. ispage:pageNo,
  13. modalVisible:false
  14. });
  15. $.ajax({
  16. method: "get",
  17. dataType: "json",
  18. crossDomain: false,
  19. url: globalConfig.context +"/api/admin/outsourceOrg/orderOutsourceList",
  20. data: {
  21. pageNo: pageNo || 1,
  22. pageSize: this.state.pagination.pageSize,
  23. contractNo: this.state.contractNoSearch,
  24. name: this.state.nameSearch,//名称
  25. starTime: this.state.releaseDate[0],//开始时间
  26. endTime: this.state.releaseDate[1],//结束时间
  27. refundStatus: this.state.refundStatusSearch,//外包审核状态
  28. },
  29. success: function(data) {
  30. let theArr = [];
  31. if(data.error.length || data.data.list == "") {
  32. if(data.error && data.error.length) {
  33. message.warning(data.error[0].message);
  34. };
  35. } else {
  36. for(let i = 0; i < data.data.list.length; i++) {
  37. let thisdata = data.data.list[i];
  38. theArr.push({
  39. key: i,
  40. id: thisdata.id,//用户ID
  41. orderNo: thisdata.orderNo,//订单编号
  42. contractNo:thisdata.contractNo,//签单金额
  43. createTime:thisdata.createTime,//流程状态
  44. signTime:thisdata.signTime,//结算状态
  45. userName:thisdata.userName,//特批状态
  46. depName:thisdata.depName,//签单时间
  47. totalAmount:thisdata.totalAmount,//客户名称
  48. adminName:thisdata.adminName,//营销员名称
  49. financeName:thisdata.financeName,//财务名称
  50. liquidationStatus:thisdata.liquidationStatus,//下单时间
  51. refundStatus:thisdata.refundStatus
  52. });
  53. };
  54. this.state.pagination.total = data.data.totalCount;
  55. this.state.pagination.current = data.data.pageNo;
  56. };
  57. if(data.data&&data.data.list&&!data.data.list.length){
  58. this.state.pagination.total=0
  59. }
  60. this.setState({
  61. dataSource: theArr,
  62. pageNo: pageNo,
  63. pagination: this.state.pagination,
  64. selectedRowKeys:[]
  65. });
  66. }.bind(this),
  67. }).always(function() {
  68. this.setState({
  69. loading: false
  70. });
  71. }.bind(this));
  72. },
  73. getInitialState() {
  74. return {
  75. page:1,
  76. releaseDate: [],
  77. selectedRowKeys: [],
  78. pictureUrl:[],
  79. attachmentUrl:[],
  80. paginations:false,
  81. activeKey: "1",
  82. confirmLoading: false,
  83. aloading:false,
  84. pagination: {
  85. defaultCurrent: 1,
  86. defaultPageSize: 10,
  87. showQuickJumper: true,
  88. pageSize: 10,
  89. onChange: function(page) {
  90. this.loadData(page);
  91. }.bind(this),
  92. showTotal: function(total) {
  93. return '共' + total + '条数据';
  94. }
  95. },
  96. columns: [
  97. {
  98. title: '订单编号',
  99. dataIndex: 'orderNo',
  100. key: 'orderNo'
  101. }, {
  102. title: '合同编号',
  103. dataIndex: 'contractNo',
  104. key: 'contractNo'
  105. },{
  106. title: '创建时间',
  107. dataIndex: 'createTime',
  108. key: 'createTime'
  109. },{
  110. title: '签单时间',
  111. dataIndex: 'signTime',
  112. key: 'signTime',
  113. }, {
  114. title: '客户名称',
  115. dataIndex: 'userName',
  116. key: 'userName',
  117. }, {
  118. title: '订单部门',
  119. dataIndex: 'depName',
  120. key: 'depName',
  121. },{
  122. title: '签单金额(万元)',
  123. dataIndex: 'totalAmount',
  124. key: 'totalAmount'
  125. },{
  126. title: '结算状态',
  127. dataIndex: 'liquidationStatus',
  128. key: 'liquidationStatus',
  129. render:text=>{return getLiquidationStatus(text)}
  130. }, {
  131. title: '外包审核',
  132. dataIndex: 'refundStatus',
  133. key: 'refundStatus',
  134. render:text=>{return getRefundStatus(text)}
  135. }, {
  136. title: '营销负责人',
  137. dataIndex: 'adminName',
  138. key: 'adminName',
  139. }, {
  140. title: '财务负责人',
  141. dataIndex: 'financeName',
  142. key: 'financeName'
  143. }
  144. ],
  145. data: [],
  146. dataSource: [],
  147. columnsX: [
  148. {
  149. title: '业务项目名称',
  150. dataIndex: 'commodityName',
  151. key: 'commodityName'
  152. }, {
  153. title: '项目类别',
  154. dataIndex: 'cname',
  155. key: 'cname',
  156. },{
  157. title: '项目数量',
  158. dataIndex: 'commodityQuantity',
  159. key: 'commodityQuantity'
  160. }, {
  161. title: '金额(万元)',
  162. dataIndex: 'commodityPrice',
  163. key: 'commodityPrice'
  164. }, {
  165. title: '负责人',
  166. dataIndex: 'contacts',
  167. key: 'contacts'
  168. }, {
  169. title: '负责人电话',
  170. dataIndex: 'contactsMobile',
  171. key: 'contactsMobile'
  172. }, {
  173. title:'项目状态',
  174. dataIndex:'projectStatus',
  175. key: 'projectStatus',
  176. render:text=>{return getProjectStatus(text)}
  177. }, {
  178. title: '主要项目',
  179. dataIndex: 'main',
  180. key: 'main',
  181. render:(text)=>{
  182. return (text?'是':'否')
  183. }
  184. }, {
  185. title: '项目说明',
  186. dataIndex: 'taskComment',
  187. key: 'taskComment',
  188. render:(text)=>{
  189. return (text&&text.length>8?text.substr(0,8)+'…':text)
  190. }
  191. }
  192. ],
  193. columnsrizhi:[
  194. {
  195. title:'流程',
  196. dataIndex: 'processName',
  197. key: 'processName'
  198. },
  199. {
  200. title:'操作人',
  201. dataIndex: 'adminName',
  202. key: 'adminName'
  203. },{
  204. title:'时间',
  205. dataIndex: 'createDate',
  206. key: 'createDate'
  207. }
  208. ],
  209. dataSourceX: [],
  210. ContactsLists: [{
  211. title: '催款科目',
  212. dataIndex: 'dunSubject',
  213. key: 'dunSubject',
  214. render: text=>{return getjiedian(text)}
  215. },{
  216. title: '金额(万)',
  217. dataIndex: 'money',
  218. key: 'money',
  219. }, {
  220. title: '催款状态',
  221. dataIndex: 'dunStatus',
  222. key: 'dunStatus',
  223. render:text=>{return getCuikuan(text)}
  224. },
  225. ],
  226. }
  227. },
  228. //页面加载函数
  229. componentWillMount() {
  230. this.loadData();
  231. },
  232. //整行点击
  233. tableRowClick(record) {
  234. this.setState({
  235. visible:true,
  236. refundStatus: record.refundStatus,
  237. });
  238. this.xiangqing(record.orderNo);
  239. this.xiangmu(record.orderNo);
  240. this.jiedian(record.orderNo);
  241. },
  242. //点击打卡项目详情
  243. tableRowClickX(record) {
  244. this.setState({
  245. jid:record.id,//项目ID
  246. kid:record.commodityId,//商品ID
  247. commodityName:record.commodityName,//金额
  248. commodityPrice:record.commodityPrice,//金额
  249. commodityQuantity:record.commodityQuantity,//数量
  250. taskComment:record.taskComment,//备注
  251. main:record.main.toString(),//是否为主要
  252. addnextVisible:true,
  253. addState:0,
  254. });
  255. },
  256. //项目详情关闭
  257. nextCancel() {
  258. this.setState({
  259. addnextVisible: false
  260. })
  261. },
  262. //订单详情
  263. xiangqing(orderNos) {
  264. $.ajax({
  265. method: "get",
  266. dataType: "json",
  267. crossDomain: false,
  268. url: globalConfig.context +"/api/admin/newOrder/getOrderNewDetail",
  269. data: {
  270. orderNo:orderNos
  271. },
  272. success: function(data) {
  273. if(data.error.length || data.data.list == "") {
  274. if(data.error && data.error.length) {
  275. message.warning(data.error[0].message);
  276. };
  277. } else {
  278. let thisdata=data.data;
  279. this.setState({
  280. orderNo: thisdata.orderNo,//订单编号
  281. contractNo: thisdata.contractNo,//合同编号
  282. userName:thisdata.userName,//客户名称
  283. signDate:thisdata.signDate,//签单时间
  284. processStatus:thisdata.processStatus,//流程状态
  285. liquidationStatus:thisdata.liquidationStatus,//结算状态
  286. contacts:thisdata.contacts,//企业联系人
  287. contactMobile:thisdata.contactMobile,//联系人电话
  288. legalPerson:thisdata.legalPerson,//法人
  289. legalPersonTel:thisdata.legalPersonTel,//法人电话
  290. firstAmount:thisdata.firstAmount,//签单金额
  291. totalAmount:thisdata.totalAmount,//首付金额
  292. approval:thisdata.approval,//特批状态
  293. settlementAmount:thisdata.settlementAmount,//已收款项
  294. orderRemarks:thisdata.orderRemarks,//订单留言
  295. orgCodeUrl: thisdata.contractPictureUrl ? splitUrl(thisdata.contractPictureUrl, ',', globalConfig.avatarHost + '/upload') : [],//图片地址
  296. salesmanName:thisdata.salesmanName,//营销员名称
  297. salesmanMobile:thisdata.salesmanMobile,//营销员电话
  298. financeName:thisdata.financeName,//财务名称
  299. financeMobile:thisdata.financeMobile,//财务电话
  300. depName:thisdata.depName,
  301. outsource: thisdata.outsource == 0 ? "否" : "是"
  302. })
  303. };
  304. }.bind(this),
  305. }).always(function() {
  306. this.setState({
  307. loading: false
  308. });
  309. }.bind(this));
  310. },
  311. //项目列表
  312. xiangmu(orderNos) {
  313. $.ajax({
  314. method: "get",
  315. dataType: "json",
  316. crossDomain: false,
  317. url: globalConfig.context +"/api/admin/newOrder/getOrderTask",
  318. data: {
  319. orderNo:orderNos
  320. },
  321. success: function(data) {
  322. let theArr = [];
  323. if(data.error.length || data.data.list == "") {
  324. if(data.error && data.error.length) {
  325. message.warning(data.error[0].message);
  326. };
  327. } else {
  328. for (let i = 0; i < data.data.length; i++) {
  329. let thisdata = data.data[i];
  330. theArr.push({
  331. key: i,
  332. id:thisdata.id,
  333. orderNo:thisdata.orderNo,//订单编号
  334. commodityId:thisdata.commodityId,//项目ID
  335. commodityName:thisdata.commodityName,//项目名称
  336. cname:thisdata.cname,//项目类别
  337. commodityPrice:thisdata.commodityPrice,//项目价格
  338. commodityQuantity:thisdata.commodityQuantity,//项目数量
  339. main:thisdata.main,//是否为主要任务
  340. taskComment:thisdata.taskComment,//任务说明
  341. contacts:thisdata.contacts,//联系人
  342. contactsMobile:thisdata.contactsMobile,//联系人电话
  343. projectStatus:thisdata.projectStatus,//项目状态
  344. });
  345. };
  346. };
  347. this.setState({
  348. dataSourceX: theArr,
  349. });
  350. }.bind(this),
  351. }).always(function() {
  352. this.setState({
  353. loading: false
  354. });
  355. }.bind(this));
  356. },
  357. rizhi(){
  358. this.setState({
  359. loading:true
  360. })
  361. $.ajax({
  362. method: "get",
  363. dataType: "json",
  364. crossDomain: false,
  365. url: '/api/admin/newOrder/selectOrderLog',
  366. data: {
  367. orderNo:this.state.orderNo
  368. },
  369. success: function (data) {
  370. let theArr = [];
  371. let thisData = data.data;
  372. if (!thisData.length) {
  373. if (data.error && data.error.length) {
  374. message.warning(data.error[0].message);
  375. };
  376. thisData = {};
  377. }else{
  378. for(let i = 0; i < data.data.length; i++) {
  379. let thisdata = data.data[i];
  380. theArr.push({
  381. processName:thisdata.processName,
  382. adminName:thisdata.adminName,
  383. createDate:thisdata.createDate,
  384. });
  385. };
  386. };
  387. this.setState({
  388. dataSourcerizhi: theArr
  389. })
  390. }.bind(this),
  391. }).always(function () {
  392. this.setState({
  393. loading: false
  394. });
  395. }.bind(this));
  396. },
  397. getOrderLog(){
  398. this.setState({
  399. rizhivisible:true
  400. })
  401. this.rizhi()
  402. },
  403. closeOrderLog(){
  404. this.setState({
  405. rizhivisible:false
  406. })
  407. },
  408. //节点列表
  409. jiedian(orderNos) {
  410. $.ajax({
  411. method: "get",
  412. dataType: "json",
  413. crossDomain: false,
  414. url: globalConfig.context +"/api/admin/newOrder/selectOrderDun",
  415. data: {
  416. orderNo:orderNos
  417. },
  418. success: function(data) {
  419. let theArr = [];
  420. let thisData=[];
  421. if(data.error.length || data.data.list == "") {
  422. if(data.error && data.error.length) {
  423. message.warning(data.error[0].message);
  424. };
  425. } else {
  426. for(let i = 0; i < data.data.length; i++) {
  427. thisData= data.data[i];
  428. theArr.push({
  429. key:i,
  430. dunSubject:thisData.dunSubject?thisData.dunSubject.toString():"",//催款科目
  431. id:thisData.id,//节点Id
  432. money:thisData.money,//催款金额
  433. dunStatus:thisData.dunStatus,//催款状态
  434. })
  435. }
  436. this.setState({
  437. contactList:theArr
  438. })
  439. };
  440. }.bind(this),
  441. }).always(function() {
  442. this.setState({
  443. loading: false
  444. });
  445. }.bind(this));
  446. },
  447. //审核通过
  448. examOk(){
  449. $.ajax({
  450. method: "post",
  451. dataType: "json",
  452. crossDomain: false,
  453. url: globalConfig.context +"/api/admin/newOrder/auditOrderNew",
  454. data: {
  455. orderNo:this.state.orderNo,
  456. orderStatus:2,
  457. },
  458. success: function(data) {
  459. if(data.error.length || data.data.list == "") {
  460. if(data.error && data.error.length) {
  461. message.warning(data.error[0].message);
  462. };
  463. } else {
  464. message.success("该订单已通过审核~");
  465. this.setState({
  466. visible:false,
  467. });
  468. this.reset();
  469. };
  470. }.bind(this),
  471. }).always(function() {
  472. this.setState({
  473. loading: false
  474. });
  475. }.bind(this));
  476. },
  477. //通过发给外包
  478. outsourcing(){
  479. $.ajax({
  480. method: "post",
  481. dataType: "json",
  482. crossDomain: false,
  483. url: globalConfig.context +"/api/admin/newOrder/auditOrderNew",
  484. data: {
  485. orderNo:this.state.orderNo,
  486. orderStatus:2,
  487. outsource:1
  488. },
  489. success: function(data) {
  490. if(data.error.length || data.data.list == "") {
  491. if(data.error && data.error.length) {
  492. message.warning(data.error[0].message);
  493. };
  494. } else {
  495. message.success("该订单已通过审核~");
  496. this.setState({
  497. visible:false,
  498. });
  499. this.reset();
  500. };
  501. }.bind(this),
  502. }).always(function() {
  503. this.setState({
  504. loading: false
  505. });
  506. }.bind(this));
  507. },
  508. //审核不通过
  509. examOks(){
  510. this.setState({
  511. aloading:true,
  512. });
  513. $.ajax({
  514. method: "post",
  515. dataType: "json",
  516. crossDomain: false,
  517. url: globalConfig.context +"/api/admin/newOrder/auditOrderNew",
  518. data: {
  519. orderNo:this.state.orderNo,
  520. orderStatus:3,
  521. reason:this.state.reason,
  522. },
  523. success: function(data) {
  524. if(data.error.length || data.data.list == "") {
  525. if(data.error && data.error.length) {
  526. message.warning(data.error[0].message);
  527. this.setState({
  528. aloading:true
  529. })
  530. };
  531. } else {
  532. message.success("该订单已被拒绝~");
  533. this.setState({
  534. visible:false,
  535. aloading:false,
  536. noVisible:false,
  537. reason:'',
  538. });
  539. this.reset();
  540. };
  541. }.bind(this),
  542. }).always(function() {
  543. this.setState({
  544. loading: false
  545. });
  546. }.bind(this));
  547. },
  548. //点击拒绝
  549. examNo(){
  550. this.setState({
  551. noVisible:true
  552. })
  553. },
  554. load(){
  555. if(this.state.attachmentUrl){
  556. let url = window.location.href.substring(7);
  557. this.state.attachmentUrl.forEach((e)=>{
  558. window.location.href="http://"+url.substring(0,url.indexOf("/"))+"/api/admin/outsourceOrg//downloadFile?path="+e.response.data
  559. })
  560. }else{
  561. message.error("此订单无上传文件")
  562. }
  563. },
  564. callback(key){
  565. this.setState({
  566. activeKey: key,
  567. })
  568. if (this.state.pictureUrl.length) {
  569. let picArr = [];
  570. this.state.pictureUrl.map(function (item) {
  571. if ( item.response && item.response.data && item.response.data.length ){
  572. picArr.push(item.response.data);
  573. }
  574. });
  575. };
  576. if (key === '2') {
  577. console.log(typeof this.state.refundStatus,!(this.state.refundStatus === 1))
  578. this.setState({
  579. loading:true,
  580. });
  581. $.ajax({
  582. method: "get",
  583. dataType: "json",
  584. crossDomain: false,
  585. url: globalConfig.context +"/api/admin/outsourceOrg/orderOutsourceDtails",
  586. data: {
  587. orderNo:this.state.orderNo,
  588. },
  589. success: function(data) {
  590. let thisdata = data.data;
  591. this.setState({
  592. id: thisdata.id,
  593. createTimes:thisdata.createTimes,
  594. auditTimes:thisdata.auditTimes,
  595. remarks:thisdata.remarks,
  596. attachmentUrl:thisdata.attachmentUrl ? splitUrl(thisdata.attachmentUrl, ',', globalConfig.avatarHost + '/upload') : [],
  597. pictureUrl: thisdata.pictureUrl ? splitUrl(thisdata.pictureUrl, ',', globalConfig.avatarHost + '/upload') : [],//图片地址
  598. amount:thisdata.amount,
  599. companyName:thisdata.companyName,
  600. outsourceRemarks:thisdata.outsourceRemarks,
  601. unitNumber:thisdata.unitNumber,
  602. unitPrice:thisdata.unitPrice,
  603. })
  604. }.bind(this),
  605. }).always(function() {
  606. this.setState({
  607. loading: false
  608. });
  609. }.bind(this));
  610. }
  611. },
  612. pass(){
  613. if (!this.state.remarks) {
  614. message.warning('审核意见不能为空')
  615. return
  616. }
  617. $.ajax({
  618. method: "post",
  619. dataType: "json",
  620. crossDomain: false,
  621. url: globalConfig.context +"/api/admin/outsourceOrg/auditOutsourceNew",
  622. data: {
  623. id:this.state.id,
  624. remarks:this.state.remarks,
  625. refundStatus: 1,
  626. orderNo: this.state.orderNo,
  627. },
  628. success:function(data){
  629. if(data.error && data.error.length) {
  630. message.warning(data.error[0].message);
  631. }else{
  632. message.success('已通过!');
  633. }
  634. }
  635. }).done(function() {
  636. this.setState({
  637. loading: false,
  638. remarks:''
  639. });
  640. this.visitCancel()
  641. }.bind(this));
  642. },
  643. refuse(){
  644. $.ajax({
  645. method: "post",
  646. dataType: "json",
  647. crossDomain: false,
  648. url: globalConfig.context +"/api/admin/outsourceOrg/auditOutsourceNew",
  649. data: {
  650. id:this.state.id,
  651. remarks:this.state.remarks,
  652. refundStatus: 2,
  653. orderNo: this.state.orderNo,
  654. },
  655. success:function(data){
  656. if(data.error && data.error.length) {
  657. message.warning(data.error[0].message);
  658. }else{
  659. message.success('已驳回!');
  660. }
  661. }
  662. }).done(function() {
  663. this.setState({
  664. loading: false,
  665. remarks:''
  666. });
  667. this.visitCancel()
  668. }.bind(this));
  669. },
  670. //关闭输入理由框
  671. noCancel(){
  672. this.setState({
  673. noVisible:false,
  674. aloading:false,
  675. reason:'',
  676. });
  677. },
  678. //搜索
  679. search() {
  680. this.setState({
  681. //signBillVisible:false
  682. })
  683. this.loadData();
  684. },
  685. //重置
  686. reset() {
  687. this.state.nameSearch='';
  688. this.state.contractNoSearch='';
  689. this.state.releaseDate[0] = undefined;
  690. this.state.releaseDate[1] = undefined;
  691. this.state.refundStatusSearch = undefined;
  692. this.loadData(1);
  693. },
  694. resets(){
  695. this.state.orderNo='';
  696. this.state.customerName='';
  697. this.state.releaseDate[0] = undefined;
  698. this.state.releaseDate[1] = undefined;
  699. },
  700. getOrgCodeUrl(e) {
  701. this.setState({ pictureUrl: e });
  702. },
  703. //关闭详情
  704. visitCancel(){
  705. this.setState({
  706. visible:false,
  707. },()=>{
  708. this.setState({
  709. activeKey:"1"
  710. })
  711. })
  712. this.resets();
  713. this.loadData(this.state.pagination.current);
  714. },
  715. visitOk(){
  716. this.setState({
  717. visible:false
  718. })
  719. this.resets();
  720. },
  721. render() {
  722. const formItemLayout = {
  723. labelCol: { span: 8 },
  724. wrapperCol: { span: 14 },
  725. };
  726. const FormItem = Form.Item;
  727. const { TabPane } = Tabs;
  728. const { RangePicker } = DatePicker;
  729. return(
  730. <div className="user-content">
  731. <div className="content-title">
  732. <span>外包审核列表</span>
  733. </div>
  734. <div className="user-search">
  735. <Input placeholder="客户名称" style={{width:'150px',marginBottom:'10px'}}
  736. value={this.state.nameSearch}
  737. onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />
  738. <Input placeholder="合同编号" style={{width:'150px'}}
  739. value={this.state.contractNoSearch}
  740. onChange={(e) => { this.setState({ contractNoSearch: e.target.value }); }} />
  741. <span style={{marginRight:"10px"}}>下单时间 :</span>
  742. <RangePicker
  743. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  744. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  745. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  746. <Select value={this.state.refundStatusSearch} style={{width:150,marginLeft:'10px'}} onChange={(e)=>{
  747. this.setState({
  748. refundStatusSearch:e
  749. })
  750. }} placeholder="审核状态">
  751. <Option value={0}>待审核</Option>
  752. <Option value={1}>审核通过</Option>
  753. <Option value={2}>审核驳回</Option>
  754. </Select>
  755. <Button type="primary" onClick={this.search} style={{marginLeft:'10px'}}>搜索</Button>
  756. <Button onClick={this.reset}>重置</Button>
  757. <div className="patent-table">
  758. <Spin spinning={this.state.loading}>
  759. <Table columns={this.state.columns}
  760. dataSource={this.state.dataSource}
  761. pagination={this.state.pagination}
  762. onRowClick={this.tableRowClick}
  763. />
  764. </Spin>
  765. </div>
  766. <Modal
  767. className="customeDetails"
  768. footer=''
  769. width='900px'
  770. visible={this.state.visible}
  771. onOk={this.visitOk}
  772. onCancel={this.visitCancel}
  773. >
  774. <Tabs activeKey={this.state.activeKey} onChange={this.callback}>
  775. <TabPane tab="订单详情" key="1">
  776. <Form layout="horizontal" onSubmit={this.handleSubmit} id="demand-form" style={{paddingBottom:'40px'}} >
  777. <Spin spinning={this.state.loading}>
  778. <div className="clearfix">
  779. <FormItem className="half-item"
  780. {...formItemLayout}
  781. label="订单编号" >
  782. <span>{this.state.orderNo}</span>
  783. </FormItem>
  784. <FormItem className="half-item"
  785. {...formItemLayout}
  786. label="合同编号" >
  787. <span>{this.state.contractNo}</span>
  788. </FormItem>
  789. <FormItem className="half-item"
  790. {...formItemLayout}
  791. label="客户名称" >
  792. <span>{this.state.userName}</span>
  793. </FormItem>
  794. <FormItem className="half-item"
  795. {...formItemLayout}
  796. label="合同签订时间" >
  797. <span>{this.state.signDate}</span>
  798. </FormItem>
  799. <FormItem className="half-item"
  800. {...formItemLayout}
  801. label="流程状态" >
  802. <span>{getProcessStatus(this.state.processStatus)}</span>
  803. </FormItem>
  804. <FormItem className="half-item"
  805. {...formItemLayout}
  806. label="结算状态" >
  807. <span>{getLiquidationStatus(this.state.liquidationStatus)}</span>
  808. </FormItem>
  809. <FormItem className="half-item"
  810. {...formItemLayout}
  811. label="企业联系人" >
  812. <span>{this.state.contacts}</span>
  813. </FormItem>
  814. <FormItem className="half-item"
  815. {...formItemLayout}
  816. label="联系人电话" >
  817. <span>{this.state.contactMobile}</span>
  818. </FormItem>
  819. <FormItem className="half-item"
  820. {...formItemLayout}
  821. label="企业法人" >
  822. <span>{this.state.legalPerson}</span>
  823. </FormItem>
  824. <FormItem className="half-item"
  825. {...formItemLayout}
  826. label="法人电话" >
  827. <span>{this.state.legalPersonTel}</span>
  828. </FormItem>
  829. <FormItem className="half-item"
  830. {...formItemLayout}
  831. label="签单金额(万元)" >
  832. <span>{this.state.totalAmount}</span>
  833. </FormItem>
  834. <FormItem className="half-item"
  835. {...formItemLayout}
  836. label="首付金额(万元)" >
  837. <span>{this.state.firstAmount}</span>
  838. </FormItem>
  839. <FormItem className="half-item"
  840. {...formItemLayout}
  841. label="特批立项" >
  842. <span>{getApprovedState(this.state.approval)}</span>
  843. </FormItem>
  844. <FormItem className="half-item"
  845. {...formItemLayout}
  846. label="已收款项(万元)" >
  847. <span>{this.state.settlementAmount}</span>
  848. </FormItem>
  849. <FormItem className="half-item"
  850. {...formItemLayout}
  851. label="订单部门" >
  852. <span>{this.state.depName}</span>
  853. </FormItem>
  854. <FormItem className="half-item"
  855. {...formItemLayout}
  856. label="是否外包" >
  857. <span>{this.state.outsource}</span>
  858. </FormItem>
  859. <div className='clearfix'>
  860. <FormItem
  861. labelCol={{ span: 4 }}
  862. wrapperCol={{ span: 16 }}
  863. label="订单留言" >
  864. <span>{this.state.orderRemarks}</span>
  865. </FormItem>
  866. </div>
  867. <div className='clearfix'>
  868. <FormItem labelCol={{ span: 4 }} wrapperCol={{ span: 18 }} label="合同扫描件">
  869. <Upload className="demandDetailShow-upload"
  870. listType="picture-card"
  871. fileList={this.state.orgCodeUrl}
  872. onPreview={(file) => {
  873. this.setState({
  874. previewImage: file.url || file.thumbUrl,
  875. previewVisible: true,
  876. });
  877. }} >
  878. </Upload>
  879. <Modal maskClosable={false} footer={null}
  880. visible={this.state.previewVisible}
  881. onCancel={() => { this.setState({ previewVisible: false }) }}>
  882. <img alt="" style={{ width: '100%' }} src={this.state.previewImage || ''} />
  883. </Modal>
  884. <Button style={{ float:"right" , marginRight:'140px' , marginTop:'20px'}}
  885. onClick={this.getOrderLog}
  886. >查看订单日志</Button>
  887. </FormItem>
  888. </div>
  889. <div className='clearfix'>
  890. <FormItem className="half-item"
  891. {...formItemLayout}
  892. label="订单负责人" >
  893. <span>{this.state.salesmanName}</span>
  894. </FormItem>
  895. <FormItem className="half-item"
  896. {...formItemLayout}
  897. label="订单负责人电话" >
  898. <span>{this.state.salesmanMobile}</span>
  899. </FormItem>
  900. </div>
  901. <div className='clearfix'>
  902. <FormItem className="half-item"
  903. {...formItemLayout}
  904. label="财务负责人" >
  905. <span>{this.state.financeName}</span>
  906. </FormItem>
  907. <FormItem className="half-item"
  908. {...formItemLayout}
  909. label="财务负责人电话" >
  910. <span>{this.state.financeMobile}</span>
  911. </FormItem>
  912. </div>
  913. <div>
  914. <span style={{marginLeft:'50px',fontSize:'20px'}}>催款节点</span>
  915. {this.state.processStatus==0?<Button type='primary' onClick={this.addcontact} style={{float:'right',marginRight:'50px',marginBottom:'15px'}}>添加催款节点</Button>:""}
  916. </div>
  917. <div className="clearfix">
  918. <Spin spinning={this.state.loading}>
  919. <Form layout="horizontal" id="demand-form" >
  920. <Table
  921. pagination={false}
  922. columns={this.state.ContactsLists}
  923. dataSource={this.state.contactList}
  924. />
  925. <Col span={24} offset={9} style={{marginTop:'15px'}}>
  926. </Col>
  927. </Form>
  928. </Spin>
  929. </div>
  930. <div>
  931. <span style={{marginLeft:'50px',fontSize:'20px'}}>项目业务</span>
  932. {this.state.processStatus==0?<Button type='primary' onClick={this.addDetailed} style={{float:'right',marginRight:'50px',marginBottom:'15px'}}>添加项目明细</Button>:""}
  933. </div>
  934. <div className="patent-table">
  935. <Spin spinning={this.state.loading}>
  936. <Table columns={this.state.columnsX}
  937. dataSource={this.state.dataSourceX}
  938. pagination={this.state.paginations}
  939. onRowClick={this.tableRowClickX}
  940. />
  941. </Spin>
  942. </div>
  943. </div>
  944. </Spin>
  945. </Form>
  946. </TabPane>
  947. <TabPane tab="外包(不走总部)" key="2">
  948. <div className="clearfix">
  949. <FormItem className="half-item"
  950. {...formItemLayout}
  951. label="外包公司" >
  952. <span>{this.state.companyName}</span>
  953. </FormItem>
  954. </div>
  955. <div className="clearfix">
  956. <FormItem className="half-item"
  957. {...formItemLayout}
  958. label="单价(万元)" >
  959. <span>{this.state.unitPrice}</span>
  960. </FormItem>
  961. </div>
  962. <div className="clearfix">
  963. <FormItem className="half-item"
  964. {...formItemLayout}
  965. label="数量(个)" >
  966. <span>{this.state.unitNumber}</span>
  967. </FormItem>
  968. </div>
  969. <div className="clearfix">
  970. <FormItem className="half-item"
  971. {...formItemLayout}
  972. label="总金额(万元)" >
  973. <span>{this.state.amount}</span>
  974. </FormItem>
  975. </div>
  976. <div className="clearfix">
  977. <FormItem className="half-item"
  978. {...formItemLayout}
  979. label="备注" >
  980. <span>{this.state.outsourceRemarks}</span>
  981. </FormItem>
  982. </div>
  983. {/*<div className="clearfix">
  984. <FormItem className="half-item" style={{height:'auto'}}
  985. {...formItemLayout}
  986. label="上传协议文件" >
  987. <Upload header={{authorization: 'authorization-text'}} action={globalConfig.context + "/api/admin/outsourceOrg/uploadOutsourceFile"}
  988. data={(e)=>{
  989. return {
  990. 'sign': e.name.substring(0,e.name.lastIndexOf("."))
  991. }
  992. }}
  993. fileList={this.state.attachmentUrl}
  994. showUploadList={{showRemoveIcon:false}}
  995. onPreview={(e)=>{
  996. let url = window.location.href.substring(7)
  997. window.location.href="http://"+url.substring(0,url.indexOf("/"))+"/api/admin/outsourceOrg//downloadFile?path="+e.response.data
  998. }}
  999. >
  1000. </Upload>
  1001. </FormItem>
  1002. </div>*/}
  1003. <div className="clearfix">
  1004. <FormItem
  1005. labelCol={{ span: 4 }}
  1006. wrapperCol={{ span: 18 }}
  1007. label="合同/协议扫描件"
  1008. >
  1009. <Upload className="demandDetailShow-upload"
  1010. listType="picture-card"
  1011. fileList={this.state.pictureUrl}
  1012. onPreview={(file) => {
  1013. this.setState({
  1014. previewImage: file.url || file.thumbUrl,
  1015. previewVisible: true,
  1016. });
  1017. }} >
  1018. </Upload>
  1019. <Modal maskClosable={false} footer={null}
  1020. visible={this.state.previewVisible}
  1021. onCancel={() => { this.setState({ previewVisible: false }) }}>
  1022. <img alt="" style={{ width: '100%' }} src={this.state.previewImage || ''} />
  1023. </Modal>
  1024. </FormItem>
  1025. </div>
  1026. {!this.state.refundStatus?<div>
  1027. <hr className="division"/>
  1028. <div className="clearfix" style={{marginTop:'20px'}}>
  1029. <FormItem
  1030. labelCol={{ span: 4 }}
  1031. wrapperCol={{ span: 18 }}
  1032. label={
  1033. <span>
  1034. <strong style={{ color: '#f00' }}>*</strong>审核意见
  1035. </span>
  1036. } >
  1037. <Input type="textarea" placeholder="请输入备注" rows={4} value={this.state.remarks}
  1038. onChange={(e)=>{this.setState({remarks:e.target.value})}} style={{width:'440px'}}/>
  1039. <span className="tip" style={{width:"160px",verticalAlign: 'top',display: 'inline-block',marginLeft: '10px'}}>通过或驳回都必须填写审核意见!</span>
  1040. </FormItem>
  1041. </div>
  1042. <div className="clearfix fa">
  1043. <Button type="danger" onClick={this.refuse} style={{color: '#fff',backgroundColor: '#f04134'}}>驳回</Button>
  1044. <Button type="primary" onClick={this.pass}>通过</Button>
  1045. </div>
  1046. </div>:<div className="clearfix">
  1047. <hr className="division"/>
  1048. <div className="clearfix">
  1049. <FormItem className="half-item"
  1050. {...formItemLayout}
  1051. label="审核意见" >
  1052. <span>{this.state.remarks}</span>
  1053. </FormItem>
  1054. </div>
  1055. <div className="clearfix">
  1056. <FormItem className="half-item"
  1057. {...formItemLayout}
  1058. label="审核结果" >
  1059. <span>{getRefundStatus(this.state.refundStatus)}</span>
  1060. </FormItem>
  1061. </div>
  1062. <div className="clearfix">
  1063. <FormItem className="half-item"
  1064. {...formItemLayout}
  1065. label="审核时间" >
  1066. <span>{this.state.auditTimes}</span>
  1067. </FormItem>
  1068. </div>
  1069. </div>}
  1070. </TabPane>
  1071. </Tabs>
  1072. </Modal>
  1073. <Modal maskClosable={false} visible={this.state.addnextVisible}
  1074. onOk={this.nextCancel} onCancel={this.nextCancel} confirmLoading={this.state.confirmLoading}
  1075. width='800px'
  1076. title={'项目任务详情'}
  1077. footer=''
  1078. className="admin-desc-content">
  1079. <Form layout="horizontal" id="demand-form">
  1080. <Spin spinning={this.state.loading}>
  1081. <div className='clearfix'>
  1082. <FormItem className="half-item"
  1083. {...formItemLayout}
  1084. label="项目名称" >
  1085. <span>{this.state.commodityName}</span>
  1086. </FormItem>
  1087. <FormItem className="half-item"
  1088. {...formItemLayout}
  1089. label="项目数量" >
  1090. <span>{this.state.commodityQuantity}</span>
  1091. </FormItem>
  1092. <FormItem className="half-item"
  1093. {...formItemLayout}
  1094. label="金额(万元)" >
  1095. <span>{this.state.commodityPrice}</span>
  1096. </FormItem>
  1097. <FormItem className="half-item"
  1098. {...formItemLayout}
  1099. label="主要项目" >
  1100. <span>{getboutique(this.state.main)}</span>
  1101. </FormItem>
  1102. <div className='clearfix'>
  1103. <FormItem
  1104. labelCol={{ span: 4 }}
  1105. wrapperCol={{ span: 16 }}
  1106. label="服务说明" >
  1107. <span>{this.state.taskComment}</span>
  1108. </FormItem>
  1109. </div>
  1110. </div>
  1111. </Spin>
  1112. </Form >
  1113. </Modal>
  1114. <Modal maskClosable={false} visible={this.state.noVisible}
  1115. onOk={this.handleOk} onCancel={this.noCancel}
  1116. width='400px'
  1117. title={'拒绝理由'}
  1118. footer=''
  1119. className="admin-desc-content"
  1120. confirmLoading={this.state.confirmLoading}>
  1121. <Form layout="horizontal" id="demand-form">
  1122. <Spin spinning={this.state.loading}>
  1123. <div className='clearfix'>
  1124. <FormItem
  1125. labelCol={{ span: 4 }}
  1126. wrapperCol={{ span: 16 }}
  1127. label="拒绝理由" >
  1128. <Input type="textarea" placeholder="请输入拒绝理由" rows={4} value={this.state.reason}
  1129. onChange={(e)=>{this.setState({reason:e.target.value})}}/>
  1130. </FormItem>
  1131. </div>
  1132. <div className='clearfix'>
  1133. <Button className="cancel" type="primary" onClick={this.examOks} style={{marginLeft:"50px"}} htmlType="submit" loading={this.state.aloading}>确定</Button>
  1134. <Button className="cancel" type="ghost" onClick={this.noCancel} style={{marginLeft:"50px"}}>取消</Button>
  1135. </div>
  1136. </Spin>
  1137. </Form >
  1138. </Modal>
  1139. <Modal visible={this.state.rizhivisible}
  1140. className="admin-desc-content"
  1141. width='800px'
  1142. maskClosable={false}
  1143. title='订单日志'
  1144. footer={null}
  1145. onCancel={this.closeOrderLog}>
  1146. <div className="patent-table">
  1147. <Spin spinning={this.state.loading}>
  1148. <Table columns={this.state.columnsrizhi}
  1149. dataSource={this.state.dataSourcerizhi}
  1150. pagination={false}
  1151. />
  1152. </Spin>
  1153. </div>
  1154. </Modal>
  1155. </div>
  1156. </div>
  1157. );
  1158. }
  1159. }));
  1160. export default checkOutsourcing;