myTask.jsx 42 KB

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