myTask.jsx 41 KB

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