projectManageDetaile.jsx 39 KB

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