projectManageDetaile.jsx 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079
  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 {getOrderType,getProjectState,getTaskStatus} from '../../../../tools.js';
  8. const MySettlementDetaile = Form.create()(React.createClass({
  9. loadData(record) {
  10. this.setState({
  11. loading: true
  12. });
  13. $.ajax({
  14. method: "get",
  15. dataType: "json",
  16. crossDomain: false,
  17. url: globalConfig.context + '/api/admin/techproject/getProjectTask',
  18. data: {
  19. contractId:record?record.id:this.props.datauser.id
  20. },
  21. success: function (data) {
  22. let theArr =[];
  23. if (!data.data) {
  24. if (data.error && data.error.length) {
  25. message.warning(data.error[0].message);
  26. };
  27. } else {
  28. for (let i = 0; i < data.data.length; i++) {
  29. let thisdata = data.data[i];
  30. theArr.push({
  31. key:i,
  32. id:thisdata.id,
  33. commodityName:thisdata.commodityName,
  34. commodityQuantity:thisdata.commodityQuantity,
  35. technicianName:thisdata.technicianName,
  36. taskStatus:thisdata.taskStatus,
  37. deleteSign:thisdata.deleteSign,
  38. taskComment:thisdata.taskComment,
  39. });
  40. };
  41. }
  42. this.setState({
  43. dataSource: theArr,
  44. });
  45. }.bind(this),
  46. }).always(function () {
  47. this.setState({
  48. loading: false
  49. });
  50. }.bind(this));
  51. },
  52. getInitialState() {
  53. return {
  54. loading: false,
  55. visible: false,
  56. contractState:false,
  57. projectVisible:false,
  58. selectedRowKey:[],
  59. orderSelect:false,
  60. orgCodeUrl:[],
  61. customerArr:[],
  62. checkedKeys: [],
  63. //派单
  64. columns: [
  65. {
  66. title: '任务名称',
  67. dataIndex: 'commodityName',
  68. key: 'commodityName'
  69. },{
  70. title: '任务数量',
  71. dataIndex: 'commodityQuantity',
  72. key: 'commodityQuantity'
  73. }, {
  74. title: '任务负责人',
  75. dataIndex: 'technicianName',
  76. key: 'technicianName'
  77. }, {
  78. title: '任务状态',
  79. dataIndex: 'taskStatus',
  80. key: 'taskStatus',
  81. render:(text)=>{return getTaskStatus(text)}
  82. }, {
  83. title: '是否锁定',
  84. dataIndex: 'deleteSign',
  85. key: 'deleteSign',
  86. render:(text)=>{return text==2?'锁定':'未锁定'}
  87. },{
  88. title: '任务说明',
  89. dataIndex: 'taskComment',
  90. key: 'taskComment',
  91. render:(text) => {
  92. return(
  93. text?text.substr(0,8)+'...':''
  94. )
  95. }
  96. },{
  97. title: '操作',
  98. dataIndex: 'rrtk',
  99. key: 'rrtk',
  100. render:(text,record,index)=>{
  101. console.log(record)
  102. return (
  103. <div>
  104. <Popconfirm title={'您将作废项目任务 【'+record.name+'】,系统将自动同步作废项目资料单,请确认!'} onConfirm={(e)=>{this.voidOperation(record)}} okText="确认" cancelText="取消">
  105. <Button style={{marginRight:'5px'}} onClick={(e) =>{ e.stopPropagation()}} type="danger">作废</Button>
  106. </Popconfirm>
  107. {record.taskStatus<1&&<Button style={{marginRight:'5px'}} onClick={(e) =>{ e.stopPropagation(),this.confirmDelet(record)}} type="primary">派单</Button>}
  108. <Popconfirm title={'您将锁定项目任务【'+record.name+'】,系统将自动同步锁定项目资料单,请确认!'} onConfirm={(e)=>{this.lockOperation(record)}} okText="确认" cancelText="取消">
  109. <Button style={{marginRight:'5px'}} onClick={(e) =>{ e.stopPropagation()}} type="danger">锁定</Button>
  110. </Popconfirm>
  111. </div>
  112. )
  113. }
  114. }
  115. ],
  116. userList:[
  117. {
  118. title: '用户编号',
  119. dataIndex: 'userNo',
  120. key: 'userNo'
  121. }, {
  122. title: '用户姓名',
  123. dataIndex: 'name',
  124. key: 'name'
  125. },{
  126. title: '部门机构',
  127. dataIndex: 'departmentName',
  128. key: 'departmentName'
  129. }, {
  130. title: '职务',
  131. dataIndex: 'position',
  132. key: 'position'
  133. },{
  134. title: '联系手机',
  135. dataIndex: 'mobile',
  136. key: 'mobile'
  137. }, {
  138. title: '操作',
  139. dataIndex: 'abc',
  140. key: 'abc',
  141. render:(text,record,index)=>{
  142. return (
  143. <Popconfirm title={'您确认将订单分配给【'+record.departmentName+'-'+record.name+'】进行业务跟进?'} onConfirm={(e)=>{this.confirmSelect(record)}} okText="确认" cancelText="取消">
  144. <Button style={{marginRight:'5px'}} type="primary">选定</Button>
  145. </Popconfirm>
  146. )
  147. }
  148. }
  149. ],
  150. };
  151. },
  152. departmentList() {
  153. this.setState({
  154. loading: true
  155. });
  156. $.ajax({
  157. method: "post",
  158. dataType: "json",
  159. crossDomain: false,
  160. url: globalConfig.context + "/api/admin/organization/selectSuperId",
  161. data: {
  162. },
  163. success: function(data) {
  164. let thedata = data.data;
  165. let theArr=[];
  166. if(!thedata) {
  167. if(data.error && data.error.length) {
  168. message.warning(data.error[0].message);
  169. };
  170. thedata = {};
  171. }else{
  172. thedata.map(function(item,index){
  173. theArr.push({
  174. key:index,
  175. name:item.name,
  176. id:item.id,
  177. })
  178. })
  179. }
  180. this.setState({
  181. departmentArr:theArr,
  182. })
  183. }.bind(this),
  184. }).always(function() {
  185. this.setState({
  186. loading: false
  187. });
  188. }.bind(this));
  189. },
  190. //查看基本详情基本信息
  191. loaduser(record){
  192. if(record){
  193. $.ajax({
  194. method: "get",
  195. dataType: "json",
  196. crossDomain: false,
  197. url: globalConfig.context + '/api/admin/techproject/getProjectDetail',
  198. data: {
  199. contractId: record.id
  200. },
  201. success: function (data) {
  202. let thisData = data.data;
  203. if (!thisData) {
  204. if (data.error && data.error.length) {
  205. message.warning(data.error[0].message);
  206. };
  207. thisData = {};
  208. };
  209. this.setState({
  210. id:record.id,
  211. orderList:thisData,
  212. technicianName:thisData.technicianName //项目负责人
  213. });
  214. }.bind(this),
  215. }).always(function () {
  216. this.setState({
  217. loading: false
  218. });
  219. }.bind(this));
  220. }
  221. },
  222. //作废
  223. voidOperation(e){
  224. this.unlock(e,true)
  225. },
  226. //锁定
  227. lockOperation(e){
  228. this.unlock(e,false)
  229. },
  230. unlock(record,state){
  231. this.setState({
  232. loading: true
  233. });
  234. let api=state?'/api/zuofei':'/api/suoding'
  235. $.ajax({
  236. method: "POST",
  237. dataType: "json",
  238. crossDomain: false,
  239. url: globalConfig.context + api,
  240. data: {
  241. id:this.props.datauser.id,
  242. uid:record.id
  243. }
  244. }).done(function (data) {
  245. if (!data.error.length) {
  246. message.success('操作成功');
  247. this.setState({
  248. loading: false,
  249. });
  250. this.loadData();
  251. } else {
  252. message.warning(data.error[0].message);
  253. };
  254. this.loadData();
  255. }.bind(this));
  256. },
  257. //订单编辑保存
  258. handleOk(e) {
  259. this.setState({
  260. visible: false,
  261. });
  262. this.props.closeDesc(false, true);
  263. },
  264. handleCancel(e) {
  265. this.setState({
  266. visible: false,
  267. });
  268. this.props.closeDesc(false);
  269. },
  270. //新建项目
  271. projectOk(e) {
  272. this.setState({
  273. projectVisible: false,
  274. });
  275. this.props.closeDesc(false, true);
  276. },
  277. projectCancel(e) {
  278. this.setState({
  279. projectVisible: false,
  280. });
  281. this.props.closeDesc(false);
  282. },
  283. //选定订单
  284. orderOk() {
  285. this.setState({
  286. orderSelect: false,
  287. });
  288. },
  289. componentWillMount() {
  290. },
  291. nextCancel() {
  292. this.setState({
  293. addnextVisible: false
  294. })
  295. },
  296. //查看订单明细
  297. orderDetails(record){
  298. if(record){
  299. $.ajax({
  300. method: "get",
  301. dataType: "json",
  302. crossDomain: false,
  303. url: globalConfig.context + '/api/admin/techproject/getProjectTaskDetail',
  304. data: {
  305. taskId: record.id
  306. },
  307. success: function (data) {
  308. let thisData = data.data;
  309. if (!thisData) {
  310. if (data.error && data.error.length) {
  311. message.warning(data.error[0].message);
  312. };
  313. thisData = {};
  314. };
  315. this.setState({
  316. taskId:thisData.taskId,
  317. taskNo:thisData.taskNo,
  318. projectNo:thisData.projectNo,
  319. categoryId:thisData.categoryId,
  320. commodityName:thisData.commodityName,
  321. taskStatus:thisData.taskStatus,
  322. taskComment:thisData.taskComment,
  323. deletedSign:thisData.deletedSign,
  324. taskAllocatorName:thisData.taskAllocatorName,
  325. taskReceiverName:thisData.taskReceiverName,
  326. taskDistributionTime:thisData.taskDistributionTime,
  327. });
  328. }.bind(this),
  329. }).always(function () {
  330. this.setState({
  331. loading: false
  332. });
  333. }.bind(this));
  334. }
  335. },
  336. //创建项目保存
  337. admissibleOrder(){
  338. if(!this.state.autoId||!this.state.customerName){
  339. message.warning('客户名称不匹配');
  340. return false;
  341. };
  342. if(!this.state.projectName){
  343. message.warning('请选择项目负责人');
  344. return false;
  345. };
  346. this.setState({
  347. loading: true
  348. });
  349. $.ajax({
  350. method: "POST",
  351. dataType: "json",
  352. crossDomain: false,
  353. url: globalConfig.context + '/api/admin/techproject/createProject',
  354. data: {
  355. uid:this.state.autoId,
  356. signComment:this.state.signComment,
  357. aid:this.state.aid
  358. }
  359. }).done(function(data) {
  360. this.setState({
  361. loading: false
  362. });
  363. if(!data.error.length) {
  364. message.success('创建成功!');
  365. this.projectOk()
  366. } else {
  367. message.warning(data.error[0].message);
  368. }
  369. }.bind(this));
  370. },
  371. //派单
  372. //操作分配
  373. confirmDelet(index){
  374. this.setState({
  375. taskIds:index.id,
  376. userDetaile:false,
  377. distributionVisible:true
  378. });
  379. this.contactList()
  380. },
  381. distributionCancel(){
  382. this.setState({
  383. distributionVisible:false
  384. })
  385. },
  386. distributionOk(){
  387. this.setState({
  388. distributionVisible:false
  389. })
  390. },
  391. //分配对象列表
  392. contactList(){
  393. $.ajax({
  394. method: "get",
  395. dataType: "json",
  396. crossDomain: false,
  397. url: globalConfig.context + '/api/admin/superviser/adminList',
  398. data: {
  399. pageNo: 1,
  400. pageSize: 99,
  401. departmentId:this.state.departmenttList,
  402. name:this.state.financeNameSearch,
  403. },
  404. success: function (data) {
  405. let theArr = [];
  406. if (!data.data) {
  407. if (data.error && data.error.length) {
  408. message.warning(data.error[0].message);
  409. };
  410. } else {
  411. for (let i = 0; i < data.data.list.length; i++) {
  412. let thisdata = data.data.list[i];
  413. theArr.push({
  414. key: i,
  415. id: thisdata.id,
  416. userNo: thisdata.userNo,
  417. name:thisdata.name,
  418. departmentName:thisdata.departmentName,
  419. departmentId:thisdata.departmentId,
  420. position:thisdata.position,
  421. mobile:thisdata.mobile,
  422. });
  423. };
  424. };
  425. this.setState({
  426. distributionList: theArr,
  427. });
  428. }.bind(this),
  429. }).always(function () {
  430. this.setState({
  431. loading: false
  432. });
  433. }.bind(this));
  434. },
  435. //选定对象
  436. confirmSelect(record){
  437. if(this.state.projectVisible){
  438. this.setState({
  439. aid:record.id,
  440. projectName:record.name
  441. })
  442. this.distributionOk();
  443. return false
  444. }
  445. this.setState({
  446. loading: true
  447. });
  448. $.ajax({
  449. method: "POST",
  450. dataType: "json",
  451. crossDomain: false,
  452. url: globalConfig.context + "/api/admin/techproject/distributionTask",
  453. data: {
  454. taskId:this.state.taskIds,
  455. taskReceiverId:record.id
  456. }
  457. }).done(function (data) {
  458. if (!data.error.length) {
  459. message.success('分派成功!');
  460. this.setState({
  461. loading: false,
  462. });
  463. this.distributionOk();
  464. this.loadData();
  465. } else {
  466. message.warning(data.error[0].message);
  467. };
  468. }.bind(this));
  469. },
  470. //添加任务
  471. addTask(){
  472. this.setState({
  473. commodityQuantity:'',
  474. commodityName:'',
  475. taskComment:'',
  476. kid:'',
  477. commodityId:undefined,
  478. addTaskState:true,
  479. addnextVisible:true,
  480. customerArr:[]
  481. });
  482. },
  483. //客户名称自动补全
  484. //加载(自动补全)
  485. supervisor(e,state){ //客户名称与服务名称自动补全
  486. // if(!state){
  487. // if(!this.state.commodityId){
  488. // message.warning('请先选择服务项目分类!')
  489. // return false;
  490. // }
  491. // }
  492. let api=state?'/api/admin/customer/findCustomerByName':'/api/admin/order/getBusinessProjectByName';
  493. $.ajax({
  494. method: "get",
  495. dataType: "json",
  496. crossDomain: false,
  497. url: globalConfig.context + api,
  498. data:state?{
  499. name:e
  500. }:{
  501. businessName:e
  502. },
  503. success: function (data) {
  504. let thedata=data.data;
  505. if (!thedata) {
  506. if (data.error && data.error.length) {
  507. message.warning(data.error[0].message);
  508. };
  509. thedata = {};
  510. };
  511. this.setState({
  512. states:state,
  513. customerArr:thedata,
  514. });
  515. }.bind(this),
  516. }).always(function () {
  517. this.setState({
  518. loading: false
  519. });
  520. }.bind(this));
  521. },
  522. //服务值改变时请求客户名称
  523. httpChange(e){
  524. if(e.length>=2){
  525. this.supervisor(e,false);
  526. }
  527. this.setState({
  528. commodityName:e
  529. })
  530. },
  531. //上级主管输入框失去焦点是判断客户是否存在
  532. selectAuto(value){
  533. let kid=[];
  534. let fwList=this.state.customerArr;
  535. fwList.map(function(item){
  536. if(value==item.bname){
  537. kid=item.id
  538. }
  539. })
  540. this.setState({
  541. kid:kid,
  542. commodityName:value,
  543. })
  544. },
  545. customerChange(e){
  546. if(e.length>=2){
  547. this.supervisor(e,true);
  548. }
  549. this.setState({
  550. customerName:e
  551. })
  552. },
  553. //客户
  554. selectAutoCUT(value){
  555. let autoIds;
  556. let fwList=this.state.customerArr;
  557. fwList.map(function(item){
  558. if(value==item.name){
  559. autoIds=item.id
  560. }
  561. })
  562. this.setState({
  563. customerName:value,
  564. autoId:autoIds
  565. })
  566. },
  567. //任务新建、编辑保存
  568. taskSumbit(e) {
  569. e.preventDefault();
  570. if(this.state.addTaskState){
  571. if(!this.state.kid){
  572. message.warning('请输入服务项目名称');
  573. return false;
  574. };
  575. if(!this.state.commodityQuantity){
  576. message.warning('请输入数量');
  577. return false;
  578. };
  579. }
  580. this.props.form.validateFields((err, values) => {
  581. if(!err) {
  582. this.setState({
  583. loading: true
  584. });
  585. let api=this.state.addTaskState?'/api/admin/techproject/addProjectTask':'/api/admin/techproject/updateProjectTask';
  586. $.ajax({
  587. method: "POST",
  588. dataType: "json",
  589. crossDomain: false,
  590. url: globalConfig.context + api,
  591. data: this.state.addTaskState?{
  592. contractId:this.props.datauser.id,
  593. commodityId:this.state.kid,
  594. commodityName:this.state.commodityName,
  595. commodityQuantity:this.state.commodityQuantity,
  596. taskComment:this.state.taskComment,
  597. }:{
  598. taskId:this.state.taskId,
  599. commodityId:this.state.kid?this.state.kid:this.state.commodityId,
  600. taskComment:this.state.taskComment
  601. }
  602. }).done(function(data) {
  603. this.setState({
  604. loading: false
  605. });
  606. if(!data.error.length) {
  607. message.success('保存成功!');
  608. this.nextCancel();
  609. this.loadData();
  610. } else {
  611. message.warning(data.error[0].message);
  612. }
  613. }.bind(this));
  614. }
  615. });
  616. },
  617. //任务项目各种骚操作
  618. unlock(){ //解锁
  619. this.removeList('1')
  620. },
  621. lock(){ //锁定
  622. this.removeList('2')
  623. },
  624. removeItem(){ //撤项
  625. this.removeList('3')
  626. },
  627. Knot(){ //结项
  628. this.removeList('4')
  629. },
  630. removeList(e){
  631. if(!e) return false;
  632. this.setState({
  633. loading: true
  634. });
  635. let api='';
  636. switch (e){
  637. case '1': //解锁
  638. api='/api/jiesuo'
  639. break;
  640. case '2': //锁定
  641. api='/api/suoding'
  642. break;
  643. case '3': //撤项
  644. api='/api/chexiang'
  645. break;
  646. case '4': //结项
  647. api='/api/jiexiang'
  648. break;
  649. };
  650. $.ajax({
  651. method: "POST",
  652. dataType: "json",
  653. crossDomain: false,
  654. url: globalConfig.context + api,
  655. data: {
  656. id:this.props.datauser.id
  657. }
  658. }).done(function(data) {
  659. this.setState({
  660. loading: false
  661. });
  662. if(!data.error.length) {
  663. message.success('操作成功!');
  664. this.handleOk()
  665. } else {
  666. message.warning(data.error[0].message);
  667. }
  668. }.bind(this));
  669. },
  670. tableRowClick(record, index) {
  671. this.setState({
  672. addTaskState:false,
  673. addnextVisible:true,
  674. });
  675. this.orderDetails(record)
  676. },
  677. componentWillReceiveProps(nextProps) { //props改变时触发
  678. this.state.projectVisible = nextProps.newProject;
  679. this.state.visible = nextProps.showDesc;
  680. if(nextProps.userDetaile && nextProps.showDesc ) {
  681. if(nextProps.datauser && nextProps.datauser.id ) {
  682. this.loaduser(nextProps.datauser);
  683. this.loadData(nextProps.datauser);
  684. }
  685. }else{
  686. this.departmentList()
  687. this.setState({
  688. customerName:'',
  689. autoId:'',
  690. signComment:'',
  691. projectName:'',
  692. aid:''
  693. })
  694. }
  695. },
  696. render() {
  697. const FormItem = Form.Item
  698. const formItemLayout = {
  699. labelCol: { span: 8 },
  700. wrapperCol: { span: 14 },
  701. };
  702. const rowSelection = {
  703. selectedRowKey: this.state.selectedRowKey,
  704. onChange: (selectedRowKey, selectedRows) => {
  705. this.setState({
  706. selectedRows: selectedRows.slice(-1),
  707. selectedRowKey: selectedRowKey.slice(-1)
  708. });
  709. },
  710. onSelectAll: (selected, selectedRows, changeRows) => {
  711. this.setState({
  712. selectedRowKey:[]
  713. })
  714. },
  715. };
  716. //
  717. let departmentArr = this.state.departmentArr || [];
  718. //const SuperArrMent = this.state.SuperArr || [];
  719. const hasSelected = this.state.selectedRowKey.length > 0;
  720. const orderDetaiel=this.state.orderList || [];
  721. const dataSources=this.state.customerArr || [];
  722. const options = this.state.states?dataSources.map((group,index) =>
  723. <Option key={index} value={group.name}>{group.name}</Option>
  724. ):dataSources.map((group,index) =>
  725. <Option key={index} value={group.bname}>{group.bname}</Option>
  726. )
  727. return(
  728. <div>
  729. <Modal maskClosable={false} visible={this.state.visible}
  730. onOk={this.handleOk} onCancel={this.handleCancel}
  731. width='1000px'
  732. title={this.props.projectState?'项目管理':'编辑订单' }
  733. footer=''
  734. className="admin-desc-content">
  735. <Form layout="horizontal" id="demand-form" style={{paddingBottom:'40px'}} onSubmit={this.handleSubmit}>
  736. <Spin spinning={this.state.loading}>
  737. <div className="clearfix">
  738. <div className="clearfix">
  739. <FormItem className="half-item"
  740. {...formItemLayout}
  741. label="订单编号" >
  742. <span>{orderDetaiel.orderNo}</span>
  743. <Button onClick={this.seeOrder} style={{float:'right',fontSize:'12px'}}>查看订单</Button>
  744. </FormItem>
  745. <FormItem className="half-item"
  746. {...formItemLayout}
  747. label="项目编号" >
  748. <span>{orderDetaiel.serialNumber}</span>
  749. </FormItem>
  750. <FormItem className="half-item"
  751. {...formItemLayout}
  752. label="客户名称" >
  753. <span>{orderDetaiel.buyerName}</span>
  754. <Button onClick={this.seeOrder} style={{float:'right',fontSize:'12px'}}>查看联系人</Button>
  755. </FormItem>
  756. <FormItem className="half-item"
  757. {...formItemLayout}
  758. label="项目类型" >
  759. <span>{getOrderType(orderDetaiel.projectType)}</span>
  760. </FormItem>
  761. <FormItem className="half-item"
  762. {...formItemLayout}
  763. label="项目负责人" >
  764. <span>{orderDetaiel.principalName}</span>
  765. </FormItem>
  766. <FormItem className="half-item"
  767. {...formItemLayout}
  768. label="项目状态" >
  769. <span>{getProjectState(orderDetaiel.projectStatus)}</span>
  770. </FormItem>
  771. <FormItem className="half-item"
  772. {...formItemLayout}
  773. label="是否锁定" >
  774. <span>{orderDetaiel.deleteSign==2?'锁定':'未锁定'}</span>
  775. </FormItem>
  776. <FormItem className="half-item"
  777. {...formItemLayout}
  778. label="立项时间" >
  779. <span>{orderDetaiel.signDate}</span>
  780. </FormItem>
  781. <div className='clearfix'>
  782. <FormItem
  783. labelCol={{ span: 4 }}
  784. wrapperCol={{ span: 16 }}
  785. label="立项说明" >
  786. <span>{orderDetaiel.signComment}</span>
  787. </FormItem>
  788. </div>
  789. </div>
  790. <div className='clearfix'>
  791. <FormItem className="half-item"
  792. {...formItemLayout}
  793. label="结项日期" >
  794. <span>{orderDetaiel.completeDate}</span>
  795. </FormItem>
  796. </div>
  797. <div className='clearfix'>
  798. <FormItem
  799. labelCol={{ span: 4 }}
  800. wrapperCol={{ span: 16 }}
  801. label="结项说明" >
  802. <span>{orderDetaiel.completeComment}</span>
  803. </FormItem>
  804. </div>
  805. <div className='clearfix'>
  806. <FormItem className="half-item"
  807. {...formItemLayout}
  808. label="是否作废" >
  809. <span>{orderDetaiel.deleteSign==1?'作废':'未作废'}</span>
  810. </FormItem>
  811. </div>
  812. <div>
  813. <span style={{marginLeft:'50px',fontSize:'20px'}}>项目任务</span>
  814. {!this.props.projectState&&<Button type='primary' onClick={this.addTask} style={{float:'right',marginRight:'100px'}}>添加任务</Button>}
  815. </div>
  816. <div className="patent-table">
  817. <Spin spinning={this.state.loading}>
  818. <Table columns={this.state.columns}
  819. dataSource={this.state.dataSource}
  820. pagination={false}
  821. onRowClick={this.tableRowClick}
  822. />
  823. </Spin>
  824. </div>
  825. {!this.props.projectState?<div style={{marginTop:'30px',paddingLeft:'100px'}}>
  826. <Button className="setSave" type="primary" htmlType="submit" style={{marginRight:'50px'}}>保存</Button>
  827. <Button className="cancel" type="ghost" onClick={this.handleCancel}>返回</Button>
  828. </div>:
  829. <div style={{marginTop:'30px',paddingLeft:'100px'}}>
  830. <Button type="primary" onClick={this.removeItem}>撤项</Button>
  831. <Button type="primary" onClick={this.Knot} style={{margin:'15px'}}>结项</Button>
  832. <Button type="danger" onClick={this.lock}>锁定</Button>
  833. <Button type="primary" onClick={this.unlock} style={{margin:'15px'}}>解锁</Button>
  834. <Button type="ghost" onClick={this.handleCancel}>返回</Button>
  835. </div>}
  836. </div>
  837. </Spin>
  838. </Form >
  839. </Modal>
  840. <Modal maskClosable={false} visible={this.state.addnextVisible}
  841. onOk={this.nextCancel} onCancel={this.nextCancel}
  842. width='800px'
  843. title={this.state.addTaskState?'添加任务':'编辑任务'}
  844. footer=''
  845. className="admin-desc-content">
  846. <Form layout="horizontal" id="demand-form" onSubmit={this.taskSumbit}>
  847. <Spin spinning={this.state.loading}>
  848. {this.state.addTaskState?<div className="clearfix">
  849. <FormItem className="half-item"
  850. {...formItemLayout}
  851. label="服务项目名称" >
  852. <AutoComplete
  853. className="certain-category-search"
  854. dropdownClassName="certain-category-search-dropdown"
  855. dropdownMatchSelectWidth={false}
  856. dropdownStyle={{ width: 200 }}
  857. style={{ width: '200px' }}
  858. dataSource={options}
  859. placeholder="输入服务名称"
  860. value={this.state.commodityName}
  861. onChange={this.httpChange}
  862. filterOption={true}
  863. onSelect={this.selectAuto}
  864. >
  865. <Input/>
  866. </AutoComplete>
  867. <span className="mandatory">*</span>
  868. </FormItem>
  869. <FormItem className="half-item"
  870. {...formItemLayout}
  871. label="数量" >
  872. <Input style={{ width: '200px' }} placeholder="输入数量"
  873. value={this.state.commodityQuantity}
  874. onChange={(e)=>{this.setState({commodityQuantity:e.target.value})}}/>
  875. <span className="mandatory">*</span>
  876. </FormItem>
  877. <div className='clearfix'>
  878. <FormItem
  879. labelCol={{ span: 4 }}
  880. wrapperCol={{ span: 16 }}
  881. label="任务说明" >
  882. <Input type="textarea" placeholder="请输入订单留言" rows={4}
  883. value={this.state.taskComment}
  884. onChange={(e)=>{this.setState({taskComment:e.target.value})}}/>
  885. </FormItem>
  886. </div>
  887. </div>:
  888. <div className="clearfix">
  889. <FormItem className="half-item"
  890. {...formItemLayout}
  891. label="项目编号" >
  892. <span>{this.state.projectNo}</span>
  893. </FormItem>
  894. <FormItem className="half-item"
  895. {...formItemLayout}
  896. label="任务编号" >
  897. <span>{this.state.taskNo}</span>
  898. </FormItem>
  899. {this.state.taskStatus<1?<FormItem className="half-item"
  900. {...formItemLayout}
  901. label="服务项目名称" >
  902. <AutoComplete
  903. className="certain-category-search"
  904. dropdownClassName="certain-category-search-dropdown"
  905. dropdownMatchSelectWidth={false}
  906. dropdownStyle={{ width: 200 }}
  907. style={{ width: '200px' }}
  908. dataSource={options}
  909. placeholder="输入服务名称"
  910. value={this.state.commodityName}
  911. onChange={this.httpChange}
  912. filterOption={true}
  913. onSelect={this.selectAuto}
  914. >
  915. <Input/>
  916. </AutoComplete>
  917. <span className="mandatory">*</span>
  918. </FormItem>:
  919. <FormItem className="half-item"
  920. {...formItemLayout}
  921. label="服务项目名称" >
  922. <span>{this.state.commodityName}</span>
  923. </FormItem>}
  924. <FormItem className="half-item"
  925. {...formItemLayout}
  926. label="任务状态" >
  927. <span>{getTaskStatus(this.state.taskStatus)}</span>
  928. </FormItem>
  929. <FormItem className="half-item"
  930. {...formItemLayout}
  931. label="是否锁定" >
  932. <span>{this.state.deletedSign==2?'锁定':'未锁定'}</span>
  933. </FormItem>
  934. <div className='clearfix'>
  935. {this.state.taskStatus<1?<FormItem
  936. labelCol={{ span: 4 }}
  937. wrapperCol={{ span: 16 }}
  938. label="任务说明" >
  939. <Input type="textarea" placeholder="请输入订单留言" rows={4} value={this.state.taskComment}
  940. onChange={(e)=>{this.setState({taskComment:e.target.value})}}/>
  941. </FormItem>:
  942. <FormItem className="half-item"
  943. {...formItemLayout}
  944. label="任务说明" >
  945. <span>{this.state.taskComment}</span>
  946. </FormItem>}
  947. </div>
  948. <div className='clearfix'>
  949. <FormItem className="half-item"
  950. {...formItemLayout}
  951. label="派单人" >
  952. <span>{this.state.taskAllocatorName}</span>
  953. </FormItem>
  954. <FormItem className="half-item"
  955. {...formItemLayout}
  956. label="派单时间" >
  957. <span>{this.state.taskDistributionTime}</span>
  958. </FormItem>
  959. <FormItem className="half-item"
  960. {...formItemLayout}
  961. label="资料负责人" >
  962. <span>{this.state.taskReceiverName}</span>
  963. </FormItem>
  964. </div>
  965. </div>}
  966. {this.state.taskStatus<1||this.state.addTaskState?<div className="clearfix" style={{marginBottom:'20px'}}>
  967. <Button className="setSave" type="primary" htmlType="submit">保存</Button>
  968. <Button className="cancel" type="ghost" onClick={this.nextCancel}>返回</Button>
  969. </div>:''}
  970. </Spin>
  971. </Form >
  972. </Modal>
  973. <Modal maskClosable={false} visible={this.state.projectVisible}
  974. onOk={this.projectOk} onCancel={this.projectCancel}
  975. width='600px'
  976. title='创建项目'
  977. footer=''
  978. className="admin-desc-content">
  979. <Form layout="horizontal" id="demand-form" style={{paddingBottom:'40px'}} >
  980. <Spin spinning={this.state.loading}>
  981. <div className="clearfix">
  982. <div className='clearfix'>
  983. <div className="clearfix">
  984. <FormItem
  985. {...formItemLayout}
  986. label="客户名称" >
  987. <AutoComplete
  988. className="certain-category-search"
  989. dropdownClassName="certain-category-search-dropdown"
  990. dropdownMatchSelectWidth={false}
  991. dropdownStyle={{ width: 200 }}
  992. size="large"
  993. style={{ width: '200px' }}
  994. dataSource={options}
  995. placeholder="输入客户名称"
  996. value={this.state.customerName}
  997. onChange={this.customerChange}
  998. filterOption={true}
  999. onBlur={this.blurCutor}
  1000. onSelect={this.selectAutoCUT}
  1001. >
  1002. <Input/>
  1003. </AutoComplete>
  1004. <span className="mandatory">*</span>
  1005. </FormItem>
  1006. </div>
  1007. <div className='clearfix'>
  1008. <FormItem
  1009. {...formItemLayout}
  1010. label="项目负责人" >
  1011. <span style={{width:'150px'}}>{this.state.projectName}</span>
  1012. <Button onClick={this.confirmDelet} style={{float:'right',marginRight:'50px'}}>选择</Button>
  1013. </FormItem>
  1014. </div>
  1015. <div className='clearfix'>
  1016. <FormItem
  1017. labelCol={{ span: 8 }}
  1018. wrapperCol={{ span: 12 }}
  1019. label="项目说明" >
  1020. <Input type="textarea" placeholder="请输入签单备注" rows={4} value={this.state.signComment}
  1021. onChange={(e)=>{this.setState({signComment:e.target.value})}}/>
  1022. </FormItem>
  1023. </div>
  1024. </div>
  1025. </div>
  1026. <FormItem wrapperCol={{ span: 12, offset: 4 }} className="half-middle">
  1027. <Button type="primary" onClick={this.admissibleOrder} style={{marginLeft:'55px'}}>保存</Button>
  1028. <Button className="submitSave" type="ghost" onClick={this.projectCancel}>返回</Button>
  1029. </FormItem>
  1030. </Spin>
  1031. </Form >
  1032. </Modal>
  1033. <Modal maskClosable={false} visible={this.state.distributionVisible}
  1034. onOk={this.distributionOk} onCancel={this.distributionCancel}
  1035. width='800px'
  1036. title='分派财务订单'
  1037. footer=''
  1038. className="admin-desc-content">
  1039. <Form layout="horizontal" id="demand-form" style={{paddingBottom:'40px'}} >
  1040. <Spin spinning={this.state.loading}>
  1041. <div>
  1042. <Select placeholder="订单部门"
  1043. style={{ width: 150 ,marginRight:'10px',marginLeft:'10px'}}
  1044. value={this.state.departmenttList}
  1045. onChange={(e) => { this.setState({ departmenttList: e }) }}>
  1046. {
  1047. departmentArr.map(function (item) {
  1048. return <Select.Option key={item.id} >{item.name}</Select.Option>
  1049. })
  1050. }
  1051. </Select>
  1052. <Input placeholder="财务负责人" style={{width:'150px',marginLeft:'10px'}}
  1053. value={this.state.financeNameSearch}
  1054. onChange={(e) => { this.setState({ financeNameSearch: e.target.value }); }} />
  1055. <Button type="primary" onClick={this.searchOrder} style={{marginLeft:'10px',marginRight:'10px'}}>搜索</Button>
  1056. <Button onClick={this.resetOrder}>重置</Button>
  1057. </div>
  1058. <div className="patent-table" style={{marginTop:'10px'}}>
  1059. <Spin spinning={this.state.loading}>
  1060. <Table columns={this.state.userList}
  1061. dataSource={this.state.distributionList}
  1062. pagination={false}
  1063. />
  1064. </Spin>
  1065. </div>
  1066. </Spin>
  1067. </Form>
  1068. </Modal>
  1069. </div>
  1070. )
  1071. }
  1072. }));
  1073. export default MySettlementDetaile;