myTask.jsx 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997
  1. import React,{Component} from 'react';
  2. import ajax from 'jquery/src/ajax/xhr.js';
  3. import $ from 'jquery/src/ajax';
  4. import moment from 'moment';
  5. import Picture from '@/manageCenter/publicComponent/picture';
  6. import '@/manageCenter/financialManage/distribute/public.less';
  7. import { Icon, Button,Form, Input, Select, Upload,Col,Spin, Table, Switch, message, DatePicker, Modal } from 'antd';
  8. import OrderDesc from '@/manageCenter/financialManage/orderDetail/orderDesc'
  9. import Assign from '@/manageCenter/publicComponent/assign';
  10. import {getProcessStatus,getApproval,getTaskStatus,getLiquidationStatus,getApprovedState,getProjectStatus,splitUrl,getjiedian,getboutique} from '@/tools';
  11. import {projectStates,taskStatus ,projectStatus} from '@/dataDic.js';
  12. const FormItem =Form.Item;
  13. const Task = React.createClass({
  14. loadData(pageNo) {
  15. this.state.data = [];
  16. this.setState({
  17. page:pageNo,
  18. loading: true
  19. });
  20. $.ajax({
  21. method: "get",
  22. dataType: "json",
  23. crossDomain: false,
  24. url: globalConfig.context + "/api/admin/orderProject/orderTaskList",
  25. data: {
  26. pageNo: pageNo || 1,
  27. pageSize: this.state.pagination.pageSize,
  28. specially:0,//个人
  29. name: this.state.nameSearch,//客户名称
  30. depId: this.state.departmenttSearch,//订单部门
  31. orderNo:this.state.orderNoSearch,//订单编号
  32. taskId:this.state.taskNoSearch, //任务编号
  33. taskStatus:this.state.taskStatus,//任务状态
  34. adminName:this.state.adminName,//任务受理人
  35. },
  36. success: function (data) {
  37. let theArr = [];
  38. if (!data.data || !data.data.list) {
  39. if (data.error && data.error.length) {
  40. message.warning(data.error[0].message);
  41. };
  42. } else {
  43. for (let i = 0; i < data.data.list.length; i++) {
  44. let thisdata = data.data.list[i];
  45. theArr.push({
  46. key: i,
  47. orderNo: thisdata.orderNo,//订单编号
  48. id:thisdata.id,//任务ID
  49. taskName:thisdata.taskName,//名称
  50. cname:thisdata.cname,//项目品类
  51. receiverName:thisdata.receiverName,//受理人
  52. projectStatus:thisdata.projectStatus,//项目状态
  53. taskStatus:thisdata.taskStatus,//任务状态
  54. taskDate:thisdata.taskDate,//分配时间
  55. userName:thisdata.userName,//用户名
  56. depName:thisdata.depName,//部门名称
  57. });
  58. };
  59. }
  60. this.state.pagination.current = data.data.pageNo;
  61. this.state.pagination.total = data.data.totalCount;
  62. if(data.data&&data.data.list&&!data.data.list.length){
  63. this.state.pagination.current=0
  64. this.state.pagination.total=0
  65. }
  66. this.setState({
  67. dataSource: theArr,
  68. pagination: this.state.pagination
  69. });
  70. }.bind(this),
  71. }).always(function () {
  72. this.setState({
  73. loading: false
  74. });
  75. }.bind(this));
  76. },
  77. getInitialState() {
  78. return {
  79. searchMore: true,
  80. assignVisible:false,
  81. releaseDate: [],
  82. roleName:'',
  83. boHuivisible:false,
  84. selectedRowKeys: [],
  85. departmentArr: [],
  86. selectedRows: [],
  87. attachmentUrl:[],
  88. paginations:false,
  89. loading: false,
  90. pagination: {
  91. defaultCurrent: 1,
  92. defaultPageSize: 10,
  93. showQuickJumper: true,
  94. pageSize: 10,
  95. onChange: function (page) {
  96. this.loadData(page);
  97. }.bind(this),
  98. showTotal: function (total) {
  99. return '共' + total + '条数据';
  100. }
  101. },
  102. columns: [
  103. {
  104. title: '任务编号',
  105. dataIndex: 'id',
  106. key: 'id',
  107. }, {
  108. title: '任务名称',
  109. dataIndex: 'taskName',
  110. key: 'taskName',
  111. render:(text)=>{
  112. return (text&&text.length>8?text.substr(0,8)+'…':text)
  113. }
  114. }, {
  115. title: '订单编号',
  116. dataIndex: 'orderNo',
  117. key: 'orderNo',
  118. },
  119. {
  120. title: '业务类别',
  121. dataIndex: 'cname',
  122. key: 'cname',
  123. },
  124. {
  125. title: '客户名称',
  126. dataIndex: 'userName',
  127. key: 'userName',
  128. render:(text)=>{
  129. return (text&&text.length>8?text.substr(0,8)+'…':text)
  130. }
  131. },
  132. {
  133. title: '任务状态',
  134. dataIndex: 'taskStatus',
  135. key: 'taskStatus',
  136. render: text => { return getTaskStatus(text)}
  137. },
  138. {
  139. title: '项目状态',
  140. dataIndex: 'projectStatus',
  141. key: 'projectStatus',
  142. render: text => { return getProjectStatus(text)}
  143. },
  144. {
  145. title: '分配时间',
  146. dataIndex: 'taskDate',
  147. key: 'taskDate',
  148. render:(text)=>{
  149. return (text&&text.length>8?text.substr(0,8)+'…':text)
  150. }
  151. },{
  152. title: '订单部门',
  153. dataIndex: 'depName',
  154. key: 'depName'
  155. },
  156. {
  157. title:'操作',
  158. dataIndex: 'caozuo',
  159. key: 'caozuo',
  160. render:(text,record)=>{
  161. return <div>
  162. <Button type="primary" onClick={(e)=>{e.stopPropagation(),this.evaluate(record,'咨询师')}}>转交</Button>
  163. <Button type="primary" style={{margin:'0 10px'}} onClick={(e)=>{e.stopPropagation(),this.okCancel(record)}}>添加工时</Button>
  164. </div>
  165. }
  166. }
  167. ],
  168. dataSource: [],
  169. searchTime: [],
  170. columnsX: [
  171. {
  172. title: '业务项目名称',
  173. dataIndex: 'commodityName',
  174. key: 'commodityName'
  175. }, {
  176. title: '项目类别',
  177. dataIndex: 'cname',
  178. key: 'cname',
  179. },{
  180. title: '项目数量',
  181. dataIndex: 'commodityQuantity',
  182. key: 'commodityQuantity'
  183. }, {
  184. title: '金额(万元)',
  185. dataIndex: 'commodityPrice',
  186. key: 'commodityPrice'
  187. }, {
  188. title: '负责人',
  189. dataIndex: 'contacts',
  190. key: 'contacts'
  191. }, {
  192. title: '负责人电话',
  193. dataIndex: 'contactsMobile',
  194. key: 'contactsMobile'
  195. }, {
  196. title: '主要项目',
  197. dataIndex: 'main',
  198. key: 'main',
  199. render:(text)=>{
  200. return (text?'是':'否')
  201. }
  202. }, {
  203. title: '项目说明',
  204. dataIndex: 'taskComment',
  205. key: 'taskComment',
  206. render:(text)=>{
  207. return (text&&text.length>8?text.substr(0,8)+'…':text)
  208. }
  209. },
  210. {
  211. title:'操作',
  212. dataIndex: 'caozuo',
  213. key: 'caouzo',
  214. render:(text,record)=>{
  215. return <div>
  216. {record.taskStatus==0?
  217. <Button type="primary" style={{margin:'0 10px'}} onClick={(e)=>{e.stopPropagation(),this.evaluate(record)}}>分配任务</Button>
  218. :''}
  219. </div>
  220. }
  221. }
  222. ],
  223. dataSourceX: [],
  224. }
  225. },
  226. /* 分派 */
  227. evaluate(record,nub){
  228. this.state.assignData=record;
  229. this.setState({
  230. nub,
  231. assignVisible:true
  232. })
  233. },
  234. componentWillMount() {
  235. this.departmentList();
  236. this.loadData();
  237. },
  238. tableRowClick(record, index) {
  239. this.state.RowData = record;
  240. this.setState({
  241. visible: true,
  242. });
  243. this.xiangqing(record.id);
  244. this.xiangqings(record.orderNo);
  245. this.xiangmu(record.orderNo);
  246. },
  247. //点击修改任务详情
  248. tijiaoOk(){
  249. let attachmentUrls = [];
  250. if (this.state.attachmentUrl.length) {
  251. let picArr = [];
  252. this.state.attachmentUrl.map(function (item) {
  253. if ( item.response && item.response.data && item.response.data.length ){
  254. picArr.push(item.response.data);
  255. }
  256. });
  257. attachmentUrls = picArr.join(",");
  258. };
  259. $.ajax({
  260. method: "POST",
  261. dataType: "json",
  262. crossDomain: false,
  263. url: globalConfig.context +'/api/admin/orderProject/updateOrderTask' ,
  264. data: {
  265. id:this.state.id,//任务编号
  266. orderNo:this.state.orderNo,//订单编号
  267. projectStatus:this.state.projectStatus,//项目状态
  268. taskStatus:this.state.taskStatus,//任务状态
  269. taskComment:this.state.taskComment,//说明
  270. startDate:this.state.startDate,//启动日期
  271. endDate:this.state.endDate,//结束日期
  272. acceptDate:this.state.acceptDate,//受理日期
  273. reviewDate:this.state.reviewDate,//评审日期
  274. publicityDate:this.state.publicityDate,//公示日期
  275. licenceDate:this.state.licenceDate,//发证日期
  276. attachmentUrl:attachmentUrls.length?attachmentUrls:'',//附件
  277. contacts:this.state.contacts,//联系人
  278. contactMobile:this.state.contactMobile,//联系人电话
  279. legalPerson:this.state.legalPerson,//法人
  280. legalPersonTel:this.state.legalPersonTel,//法人电话
  281. certificateNumber:this.state.certificateNumber
  282. }
  283. }).done(function(data) {
  284. this.setState({
  285. loading: false
  286. });
  287. if(!data.error.length) {
  288. message.success('保存成功!');
  289. this.visitCancel();
  290. } else {
  291. message.warning(data.error[0].message);
  292. }
  293. }.bind(this));
  294. },
  295. //点击修改任务详情
  296. tianjiaOk(){
  297. let attachmentUrls = [];
  298. if (this.state.attachmentUrl.length) {
  299. let picArr = [];
  300. this.state.attachmentUrl.map(function (item) {
  301. if ( item.response && item.response.data && item.response.data.length ){
  302. picArr.push(item.response.data);
  303. }
  304. });
  305. attachmentUrls = picArr.join(",");
  306. };
  307. $.ajax({
  308. method: "POST",
  309. dataType: "json",
  310. crossDomain: false,
  311. url: globalConfig.context +'/api/admin/orderProject/addTaskHours' ,
  312. data: {
  313. taskId:this.state.taskId,//任务编号
  314. hours:this.state.hours,//工时
  315. remarks:this.state.remarks,//说明
  316. taskDate:this.state.taskDate,//日期
  317. taskComment:this.state.taskComment,//说明
  318. }
  319. }).done(function(data) {
  320. this.setState({
  321. loading: false
  322. });
  323. if(!data.error.length) {
  324. message.success('保存成功!');
  325. this.noCancel();
  326. } else {
  327. message.warning(data.error[0].message);
  328. }
  329. }.bind(this));
  330. },
  331. //订单详情
  332. xiangqing(id) {
  333. $.ajax({
  334. method: "get",
  335. dataType: "json",
  336. crossDomain: false,
  337. url: globalConfig.context +"/api/admin/orderProject/orderTaskDetail",
  338. data: {
  339. id:id
  340. },
  341. success: function(data) {
  342. let theArr = [];
  343. if(data.error.length || data.data.list == "") {
  344. if(data.error && data.error.length) {
  345. message.warning(data.error[0].message);
  346. };
  347. } else {
  348. let thisdata=data.data;
  349. this.setState({
  350. id: thisdata.id,//ID
  351. orderNo: thisdata.orderNo,//订单编号
  352. userName:thisdata.userName,//客户名称
  353. taskName: thisdata.taskName,//任务名称
  354. cname:thisdata.cname,//项目品类
  355. projectStatus:thisdata.projectStatus.toString(),//项目状态
  356. taskStatus:thisdata.taskStatus.toString(),//任务状态
  357. taskDate:thisdata.taskDate,//分配时间
  358. taskComment:thisdata.taskComment,//说明
  359. attachmentUrl: thisdata.attachmentUrl ? splitUrl(thisdata.attachmentUrl, ',', globalConfig.avatarHost + '/upload') : [],//图片地址
  360. salesmanName:thisdata.salesmanName,//订单负责人
  361. startDate:thisdata.startDate,//启动日期
  362. endDate:thisdata.endDate,//结束日期
  363. acceptDate:thisdata.acceptDate,//受理日期
  364. reviewDate:thisdata.reviewDate,//评审日期
  365. publicityDate:thisdata.publicityDate,//公示日期
  366. licenceDate:thisdata.licenceDate,//发证日期
  367. contacts:thisdata.contacts,//联系人
  368. contactMobile:thisdata.contactMobile,//联系人电话
  369. legalPerson:thisdata.legalPerson,//法人
  370. legalPersonTel:thisdata.legalPersonTel,//法人电话
  371. certificateNumber:thisdata.certificateNumber
  372. })
  373. };
  374. }.bind(this),
  375. }).always(function() {
  376. this.setState({
  377. loading: false
  378. });
  379. }.bind(this));
  380. },
  381. //订单详情
  382. xiangqings(orderNos) {
  383. $.ajax({
  384. method: "get",
  385. dataType: "json",
  386. crossDomain: false,
  387. url: globalConfig.context +"/api/admin/newOrder/getOrderNewDetail",
  388. data: {
  389. orderNo:orderNos
  390. },
  391. success: function(data) {
  392. let theArr = [];
  393. if(data.error.length || data.data.list == "") {
  394. if(data.error && data.error.length) {
  395. message.warning(data.error[0].message);
  396. };
  397. } else {
  398. let thisdata=data.data;
  399. this.setState({
  400. processStatus:thisdata.processStatus,//流程状态
  401. liquidationStatus:thisdata.liquidationStatus,//结算状态
  402. approval:thisdata.approval,//特批状态
  403. orderRemarks:thisdata.orderRemarks,//订单留言
  404. salesmanName:thisdata.salesmanName,//营销员名称
  405. salesmanMobile:thisdata.salesmanMobile,//营销员电话
  406. financeName:thisdata.financeName,//财务名称
  407. financeMobile:thisdata.financeMobile,//财务电话
  408. depName:thisdata.depName,//订单部门
  409. })
  410. };
  411. }.bind(this),
  412. }).always(function() {
  413. this.setState({
  414. loading: false
  415. });
  416. }.bind(this));
  417. },
  418. //项目列表
  419. xiangmu(orderNos) {
  420. $.ajax({
  421. method: "get",
  422. dataType: "json",
  423. crossDomain: false,
  424. url: globalConfig.context +"/api/admin/newOrder/getOrderTask",
  425. data: {
  426. orderNo:orderNos
  427. },
  428. success: function(data) {
  429. let theArr = [];
  430. if(data.error.length || data.data.list == "") {
  431. if(data.error && data.error.length) {
  432. message.warning(data.error[0].message);
  433. };
  434. } else {
  435. for (let i = 0; i < data.data.length; i++) {
  436. let thisdata = data.data[i];
  437. theArr.push({
  438. key: i,
  439. id:thisdata.id,
  440. orderNo:thisdata.orderNo,//订单编号
  441. commodityId:thisdata.commodityId,//项目ID
  442. commodityName:thisdata.commodityName,//项目名称
  443. cname:thisdata.cname,//项目类别
  444. commodityPrice:thisdata.commodityPrice,//项目价格
  445. commodityQuantity:thisdata.commodityQuantity,//项目数量
  446. main:thisdata.main,//是否为主要任务
  447. taskComment:thisdata.taskComment,//任务说明
  448. contacts:thisdata.contacts,//联系人
  449. contactsMobile:thisdata.contactsMobile,//联系人电话
  450. taskStatus:thisdata.taskStatus,//是否分配
  451. certificateNumber:thisdata.certificateNumber
  452. });
  453. };
  454. };
  455. this.setState({
  456. dataSourceX: theArr,
  457. });
  458. }.bind(this),
  459. }).always(function() {
  460. this.setState({
  461. loading: false
  462. });
  463. }.bind(this));
  464. },
  465. //关闭详情
  466. visitCancel(e){
  467. this.setState({
  468. visible:false
  469. })
  470. this.reset();
  471. },
  472. visitOk(e){
  473. this.setState({
  474. visible:false
  475. })
  476. this.reset();
  477. },
  478. closeDesc(e, s) {
  479. this.state.showDesc = e;
  480. if (s) {
  481. this.loadData(this.state.page);
  482. };
  483. },
  484. closeAssign(e, s) {
  485. this.state.roleName='';
  486. this.state.assignVisible = e;
  487. if (s) {
  488. this.loadData(this.state.page);
  489. };
  490. },
  491. //添加工时
  492. okCancel(record){
  493. this.setState({
  494. lookVisible:true,
  495. taskId:record.id
  496. })
  497. },
  498. nextCancel() {
  499. this.setState({
  500. addnextVisible: false
  501. })
  502. },
  503. //点击打卡项目详情
  504. tableRowClickX(record, index) {
  505. this.setState({
  506. jid:record.id,//项目ID
  507. kid:record.commodityId,//商品ID
  508. commodityName:record.commodityName,//金额
  509. commodityPrice:record.commodityPrice,//金额
  510. commodityQuantity:record.commodityQuantity,//数量
  511. taskComment:record.taskComment,//备注
  512. main:record.main.toString(),//是否为主要
  513. addnextVisible:true,
  514. addState:0,
  515. });
  516. },
  517. //关闭添加工时
  518. noCancel(){
  519. this.setState({
  520. lookVisible:false
  521. })
  522. this.reset();
  523. },
  524. search() {
  525. this.loadData();
  526. },
  527. reset() {
  528. this.state.id='';//任务编号
  529. this.state.orderNo='';//订单编号
  530. this.state.projectStatus=undefined;//项目状态
  531. this.state.taskStatus=undefined;//任务状态
  532. this.state.taskComment='';//说明
  533. this.state.startDate='';//启动日期
  534. this.state.endDate='';//结束日期
  535. this.state.acceptDate='';//受理日期
  536. this.state.reviewDate='';//评审日期
  537. this.state.publicityDate='';//公示日期
  538. this.state.licenceDate='';//发证日期
  539. attachmentUrl:[];//附件
  540. this.state.contacts='';//联系人
  541. this.state.contactMobile='';//联系人电话
  542. this.state.legalPerson='';//法人
  543. this.state.legalPersonTel='';//法人电话
  544. this.state.taskId='';//任务编号
  545. this.state.hours='';//工时
  546. this.state.remarks='';//说明
  547. this.state.taskDate='';//日期
  548. this.state.taskComment='';//说明
  549. this.state.nameSearch = '';
  550. this.state.releaseDate = [];
  551. this.state.orderNoSearch='';
  552. this.state.taskNoSearch='';
  553. this.state.distribution=undefined;
  554. this.state.departmenttSearch=undefined;
  555. this.loadData(this.state.page);
  556. },
  557. searchSwitch() {
  558. this.setState({
  559. searchMore: !this.state.searchMore
  560. });
  561. },
  562. //部门
  563. departmentList() {
  564. this.setState({
  565. loading: true
  566. });
  567. $.ajax({
  568. method: "get",
  569. dataType: "json",
  570. crossDomain: false,
  571. url: globalConfig.context + "/api/admin/organization/selectSuperId",
  572. data: {
  573. },
  574. success: function(data) {
  575. let thedata = data.data;
  576. let theArr = [];
  577. if(!thedata) {
  578. if(data.error && data.error.length) {
  579. message.warning(data.error[0].message);
  580. };
  581. thedata = {};
  582. } else {
  583. thedata.map(function(item, index) {
  584. theArr.push({
  585. key: index,
  586. name: item.name,
  587. id: item.id,
  588. })
  589. })
  590. }
  591. this.setState({
  592. departmentArr: theArr,
  593. })
  594. }.bind(this),
  595. }).always(function() {
  596. this.setState({
  597. loading: false
  598. });
  599. }.bind(this));
  600. },
  601. render() {
  602. const rowSelection = {
  603. selectedRowKeys: this.state.selectedRowKeys,
  604. onChange: (selectedRowKeys, selectedRows) => {
  605. this.setState({
  606. selectedRows: selectedRows.slice(-1),
  607. selectedRowKeys: selectedRowKeys.slice(-1)
  608. });
  609. }
  610. };
  611. const formItemLayout = {
  612. labelCol: { span: 6 },
  613. wrapperCol: { span: 12 },
  614. };
  615. const hasSelected = this.state.selectedRowKeys.length > 0;
  616. const { RangePicker } = DatePicker;
  617. let departmentArr = this.state.departmentArr || [];
  618. return ( <div className="user-content">
  619. <div className="content-title">
  620. <span>任务派单管理</span>
  621. </div>
  622. <div className="user-search">
  623. <Input placeholder="客户名称"
  624. value={this.state.nameSearch}
  625. onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />
  626. <Input placeholder="订单编号"
  627. value={this.state.orderNoSearch}
  628. onChange={(e) => { this.setState({ orderNoSearch: e.target.value }); }} />
  629. <Input placeholder="任务编号"
  630. value={this.state.taskNoSearch}
  631. onChange={(e) => { this.setState({ taskNoSearch: e.target.value }); }} />
  632. <Select placeholder="选择部门"
  633. style={{ width: 150 ,marginRight:'10px'}}
  634. value={this.state.departmenttSearch}
  635. onChange={(e) => { this.setState({ departmenttSearch: e }) }}>
  636. {
  637. departmentArr.map(function (item) {
  638. return <Select.Option key={item.id} >{item.name}</Select.Option>
  639. })
  640. }
  641. </Select>
  642. <Button type="primary" onClick={this.search}>搜索</Button>
  643. <Button onClick={this.reset}>重置</Button>
  644. {/* <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
  645. <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
  646. <span>订单时间 :</span>
  647. <RangePicker
  648. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  649. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  650. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  651. </div> */}
  652. </div>
  653. <div className="patent-table">
  654. <Spin spinning={this.state.loading}>
  655. <Table columns={this.state.columns}
  656. dataSource={this.state.dataSource}
  657. rowSelection={rowSelection}
  658. pagination={this.state.pagination}
  659. onRowClick={this.tableRowClick.bind(this)} />
  660. </Spin>
  661. </div>
  662. <Assign
  663. title="任务"
  664. selApi={"/api/admin/orderProject/projectDistribution"}
  665. data={this.state.assignData}
  666. showDesc={this.state.assignVisible}
  667. closeDesc={this.closeAssign.bind(this)}
  668. fenpaiData={8}
  669. specially={0}
  670. roleName={this.state.nub}
  671. requestMethod = {"post"}
  672. />
  673. <Modal
  674. className="customeDetails"
  675. footer=''
  676. title="订单详情"
  677. width='900px'
  678. visible={this.state.visible}
  679. onOk={this.visitOk}
  680. onCancel={this.visitCancel}
  681. >
  682. <Form layout="horizontal" onSubmit={this.handleSubmit} id="demand-form" style={{paddingBottom:'00px'}} >
  683. <Spin spinning={this.state.loading}>
  684. <div className="clearfix">
  685. <FormItem className="half-item"
  686. {...formItemLayout}
  687. label="任务编号" >
  688. <span>{this.state.id}</span>
  689. </FormItem>
  690. <FormItem className="half-item"
  691. {...formItemLayout}
  692. label="任务名称" >
  693. <span>{this.state.taskName}</span>
  694. </FormItem>
  695. <FormItem className="half-item"
  696. {...formItemLayout}
  697. label="订单编号" >
  698. <span>{this.state.orderNo}</span>
  699. </FormItem>
  700. <FormItem className="half-item"
  701. {...formItemLayout}
  702. label="业务类别" >
  703. <span>{this.state.cname}</span>
  704. </FormItem>
  705. <FormItem className="half-item"
  706. {...formItemLayout}
  707. label="客户名称" >
  708. <span>{this.state.userName}</span>
  709. </FormItem>
  710. <FormItem className="half-item"
  711. {...formItemLayout}
  712. label="特批立项" >
  713. <span>{getApprovedState(this.state.approval)}</span>
  714. </FormItem>
  715. <FormItem className="half-item"
  716. {...formItemLayout}
  717. label="流程状态" >
  718. <span>{getProcessStatus(this.state.processStatus)}</span>
  719. </FormItem>
  720. <FormItem className="half-item"
  721. {...formItemLayout}
  722. label="结算状态" >
  723. <span>{getLiquidationStatus(this.state.liquidationStatus)}</span>
  724. </FormItem>
  725. <FormItem className="half-item"
  726. {...formItemLayout}
  727. label="订单负责人" >
  728. <span>{this.state.salesmanName}</span>
  729. </FormItem>
  730. <FormItem className="half-item"
  731. {...formItemLayout}
  732. label="订单负责人电话" >
  733. <span>{this.state.salesmanMobile}</span>
  734. </FormItem>
  735. <FormItem className="half-item"
  736. {...formItemLayout}
  737. label="财务负责人" >
  738. <span>{this.state.financeName}</span>
  739. </FormItem>
  740. <FormItem className="half-item"
  741. {...formItemLayout}
  742. label="财务负责人电话" >
  743. <span>{this.state.financeMobile}</span>
  744. </FormItem>
  745. <FormItem className="half-item"
  746. {...formItemLayout}
  747. label="证书编号" >
  748. <Input placeholder="请输入证书编号" value={this.state.certificateNumber} style={{width:'200px'}}
  749. onChange={(e)=>{this.setState({certificateNumber:e.target.value})}} ref="commodityQuantity"/>
  750. </FormItem>
  751. <FormItem className="half-item"
  752. {...formItemLayout}
  753. label="客户联系人" >
  754. <Input placeholder="请输入联系人名称" value={this.state.contacts} style={{width:'200px'}}
  755. onChange={(e)=>{this.setState({contacts:e.target.value})}} ref="commodityQuantity"/>
  756. </FormItem>
  757. <FormItem className="half-item"
  758. {...formItemLayout}
  759. label="联系人电话" >
  760. <Input placeholder="请输入联系人电话" value={this.state.contactMobile} style={{width:'200px'}}
  761. onChange={(e)=>{this.setState({contactMobile:e.target.value})}} ref="commodityQuantity"/>
  762. </FormItem>
  763. <FormItem className="half-item"
  764. {...formItemLayout}
  765. label="企业法人" >
  766. <Input placeholder="请输入法人名称" value={this.state.legalPerson} style={{width:'200px'}}
  767. onChange={(e)=>{this.setState({legalPerson:e.target.value})}} ref="commodityQuantity"/>
  768. </FormItem>
  769. <FormItem className="half-item"
  770. {...formItemLayout}
  771. label="法人电话" >
  772. <Input placeholder="请输入法人电话" value={this.state.legalPersonTel} style={{width:'200px'}}
  773. onChange={(e)=>{this.setState({legalPersonTel:e.target.value})}} ref="commodityQuantity"/>
  774. </FormItem>
  775. <FormItem className="half-item"
  776. {...formItemLayout}
  777. label="项目状态" >
  778. <Select placeholder="选择项目状态"
  779. style={{ width:'200px'}}
  780. value={this.state.projectStatus}
  781. onChange={(e)=>{this.setState({projectStatus:e})}}>
  782. {
  783. projectStatus.map(function (item) {
  784. return <Select.Option key={item.value} >{item.key}</Select.Option>
  785. })
  786. }
  787. </Select>
  788. </FormItem>
  789. <FormItem className="half-item"
  790. {...formItemLayout}
  791. label="任务状态" >
  792. <Select placeholder="选择任务状态"
  793. style={{ width:'200px'}}
  794. value={this.state.taskStatus}
  795. onChange={(e)=>{this.setState({taskStatus:e})}}>
  796. {
  797. taskStatus.map(function (item) {
  798. return <Select.Option key={item.value} >{item.key}</Select.Option>
  799. })
  800. }
  801. </Select>
  802. </FormItem>
  803. <FormItem className="half-item" {...formItemLayout} label="启动时间">
  804. <DatePicker
  805. style={{marginTop:"2px",width: '200px',height:"32px" }}
  806. showTime
  807. format="YYYY-MM-DD"
  808. onOk={(e)=>{}}
  809. value={this.state.startDate ? moment(this.state.startDate) : null}
  810. onChange={(data, dataString) => { this.setState({ startDate: dataString }); }} />
  811. </FormItem>
  812. <FormItem className="half-item" {...formItemLayout} label="完成时间">
  813. <DatePicker
  814. style={{marginTop:"2px",width: '200px',height:"32px" }}
  815. showTime
  816. format="YYYY-MM-DD"
  817. onOk={(e)=>{}}
  818. value={this.state.endDate ? moment(this.state.endDate) : null}
  819. onChange={(data, dataString) => { this.setState({ endDate: dataString }); }} />
  820. </FormItem>
  821. <FormItem className="half-item" {...formItemLayout} label="受理时间">
  822. <DatePicker
  823. style={{marginTop:"2px",width: '200px',height:"32px" }}
  824. showTime
  825. format="YYYY-MM-DD"
  826. onOk={(e)=>{}}
  827. value={this.state.acceptDate ? moment(this.state.acceptDate) : null}
  828. onChange={(data, dataString) => { this.setState({ acceptDate: dataString }); }} />
  829. </FormItem>
  830. <FormItem className="half-item" {...formItemLayout} label="评审时间">
  831. <DatePicker
  832. style={{marginTop:"2px",width: '200px',height:"32px" }}
  833. showTime
  834. format="YYYY-MM-DD"
  835. onOk={(e)=>{}}
  836. value={this.state.reviewDate ? moment(this.state.reviewDate) : null}
  837. onChange={(data, dataString) => { this.setState({ reviewDate: dataString }); }} />
  838. </FormItem>
  839. <FormItem className="half-item" {...formItemLayout} label="公示时间">
  840. <DatePicker
  841. style={{marginTop:"2px",width: '200px',height:"32px" }}
  842. showTime
  843. format="YYYY-MM-DD"
  844. onOk={(e)=>{}}
  845. value={this.state.publicityDate ? moment(this.state.publicityDate) : null}
  846. onChange={(data, dataString) => { this.setState({ publicityDate: dataString }); }} />
  847. </FormItem>
  848. <FormItem className="half-item" {...formItemLayout} label="发证时间">
  849. <DatePicker
  850. style={{marginTop:"2px",width: '200px',height:"32px" }}
  851. showTime
  852. format="YYYY-MM-DD"
  853. onOk={(e)=>{}}
  854. value={this.state.licenceDate ? moment(this.state.licenceDate) : null}
  855. onChange={(data, dataString) => { this.setState({ licenceDate: dataString }); }} />
  856. </FormItem>
  857. <div className='clearfix'>
  858. <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label="附件">
  859. <Picture
  860. fileList={(e)=>{this.setState({attachmentUrl:e})}}
  861. pictureUrl={this.state.attachmentUrl}
  862. visible={this.props.visible}
  863. data={{'sign':'order_task_file',url:'/api/admin/orderProject/uploadOrderTaskFile',number:8}}
  864. />
  865. </FormItem>
  866. </div>
  867. <div className='clearfix'>
  868. <FormItem
  869. labelCol={{ span: 3 }}
  870. wrapperCol={{ span: 16 }}
  871. label="备注" >
  872. <Input type="textarea" placeholder="请输入备注" rows={4} value={this.state.taskComment}
  873. onChange={(e)=>{this.setState({taskComment:e.target.value})}}/>
  874. </FormItem>
  875. </div>
  876. <div>
  877. <span style={{marginLeft:'50px',fontSize:'20px'}}>项目业务</span>
  878. {this.state.processStatus==0?<Button type='primary' onClick={this.addDetailed} style={{float:'right',marginRight:'50px',marginBottom:'15px'}}>添加项目明细</Button>:""}
  879. </div>
  880. <div className="patent-table">
  881. <Spin spinning={this.state.loading}>
  882. <Table columns={this.state.columnsX}
  883. dataSource={this.state.dataSourceX}
  884. pagination={this.state.paginations}
  885. onRowClick={this.tableRowClickX}
  886. />
  887. </Spin>
  888. </div>
  889. <div className='clearfix'>
  890. <Button className="cancel" type="primary" onClick={this.tijiaoOk} style={{marginLeft:"200px",marginTop:'10px'}} htmlType="submit">保存</Button>
  891. <Button className="cancel" type="ghost" onClick={this.visitCancel} style={{marginLeft:"50px",marginTop:'10px'}}>取消</Button>
  892. </div>
  893. </div>
  894. </Spin>
  895. </Form>
  896. </Modal>
  897. <Modal maskClosable={false} visible={this.state.lookVisible}
  898. onOk={this.noCancel} onCancel={this.noCancel}
  899. width='500px'
  900. title={'添加工时'}
  901. footer=''
  902. className="admin-desc-content">
  903. <Form layout="horizontal" id="demand-form">
  904. <Spin spinning={this.state.loading}>
  905. <div className='clearfix'>
  906. <FormItem {...formItemLayout} label="工作日期">
  907. <DatePicker
  908. style={{marginTop:"2px",width: '200px',height:"32px" }}
  909. showTime
  910. format="YYYY-MM-DD"
  911. onOk={(e)=>{}}
  912. value={this.state.taskDate ? moment(this.state.taskDate) : null}
  913. onChange={(data, dataString) => { this.setState({ taskDate: dataString }); }} />
  914. </FormItem>
  915. </div>
  916. <div className='clearfix'>
  917. <FormItem
  918. {...formItemLayout}
  919. label="工作时长" >
  920. <Input placeholder="请输入工作时长" value={this.state.hours} style={{width:'200px'}}
  921. onChange={(e)=>{this.setState({hours:e.target.value})}} ref="commodityQuantity"/>
  922. </FormItem>
  923. </div>
  924. <div className='clearfix'>
  925. <FormItem
  926. {...formItemLayout}
  927. label="工作内容" >
  928. <Input type="textarea" placeholder="请输入备注" rows={4} value={this.state.remarks}
  929. onChange={(e)=>{this.setState({remarks:e.target.value})}}/>
  930. </FormItem>
  931. </div>
  932. <div className='clearfix'>
  933. <Button className="cancel" type="primary" onClick={this.tianjiaOk} style={{marginLeft:"100px",marginTop:'10px'}} htmlType="submit">确定</Button>
  934. <Button className="cancel" type="ghost" onClick={this.noCancel} style={{marginLeft:"50px"}}>取消</Button>
  935. </div>
  936. </Spin>
  937. </Form >
  938. </Modal>
  939. <Modal maskClosable={false} visible={this.state.addnextVisible}
  940. onOk={this.nextCancel} onCancel={this.nextCancel}
  941. width='800px'
  942. title='项目任务详情'
  943. footer=''
  944. className="admin-desc-content">
  945. <Form layout="horizontal" onSubmit={this.nextSubmit} id="demand-form">
  946. <Spin spinning={this.state.loading}>
  947. <div className='clearfix'>
  948. <FormItem className="half-item"
  949. {...formItemLayout}
  950. label="项目名称" >
  951. <span>{this.state.commodityName}</span>
  952. </FormItem>
  953. <FormItem className="half-item"
  954. {...formItemLayout}
  955. label="项目数量" >
  956. <span>{this.state.commodityQuantity}</span>
  957. </FormItem>
  958. <FormItem className="half-item"
  959. {...formItemLayout}
  960. label="金额(万元)" >
  961. <span>{this.state.commodityPrice}</span>
  962. </FormItem>
  963. <FormItem className="half-item"
  964. {...formItemLayout}
  965. label="主要项目" >
  966. <span>{getboutique(this.state.main)}</span>
  967. </FormItem>
  968. <div className='clearfix'>
  969. <FormItem
  970. labelCol={{ span: 3 }}
  971. wrapperCol={{ span: 18 }}
  972. label="服务说明" >
  973. <span>{this.state.taskComment}</span>
  974. </FormItem>
  975. </div>
  976. </div>
  977. </Spin>
  978. </Form >
  979. </Modal>
  980. </div> )
  981. }
  982. })
  983. export default Task;