taskQuery.jsx 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243
  1. import React,{Component} from 'react';
  2. import ajax from 'jquery/src/ajax/xhr.js';
  3. import $ from 'jquery';
  4. import moment from 'moment';
  5. import '@/manageCenter/financialManage/distribute/public.less';
  6. import Picture from '@/manageCenter/publicComponent/picture';
  7. import { Icon, Button, Form, Radio, Input, InputNumber, 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 './table.less';
  11. import {getProcessStatus,getApproval,getTaskStatus,getLiquidationStatus,getApprovedState,getProjectState,splitUrl,getProjectStatus,getboutique,getprovince} from '@/tools';
  12. const FormItem =Form.Item;
  13. const PicturesWall = React.createClass({
  14. getInitialState() {
  15. return {
  16. previewVisible: false,
  17. previewImage: '',
  18. fileList: this.props.pictureUrl,
  19. }
  20. },
  21. getDefaultProps(){
  22. return{
  23. changeClick:this.modifyChange
  24. }
  25. },
  26. handleCancel() {
  27. this.setState({ previewVisible: false })
  28. },
  29. handlePreview(file) {
  30. this.setState({
  31. previewImage: file.url || file.thumbUrl,
  32. previewVisible: true,
  33. });
  34. },
  35. handleChange(info) {
  36. let fileList = info.fileList;
  37. this.setState({ fileList });
  38. this.props.fileList(fileList);
  39. },
  40. componentWillReceiveProps(nextProps) {
  41. this.state.fileList = nextProps.pictureUrl;
  42. },
  43. render() {
  44. const { previewVisible, previewImage, fileList } = this.state;
  45. const uploadButton = (
  46. <div>
  47. <Icon type="plus" />
  48. <div className="ant-upload-text">点击上传</div>
  49. </div>
  50. );
  51. return (
  52. <div style={{display:"inline-block"}}>
  53. <Upload
  54. action={globalConfig.context + "/api/admin/patentNew/uploadFile"}
  55. data={{ 'sign': '' }}
  56. listType="picture-card"
  57. fileList={fileList}
  58. onPreview={this.handlePreview}
  59. onChange={this.handleChange} >
  60. {uploadButton}
  61. </Upload>
  62. <Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}>
  63. <img alt="example" style={{ width: '100%' }} src={previewImage} />
  64. </Modal>
  65. </div>
  66. );
  67. }
  68. });
  69. const Task = React.createClass({
  70. loadData(pageNo) {
  71. this.state.data = [];
  72. this.setState({
  73. page:pageNo,
  74. loading: true
  75. });
  76. $.ajax({
  77. method: "get",
  78. dataType: "json",
  79. crossDomain: false,
  80. url: globalConfig.context + "/api/admin/orderProject/selectTaskList",
  81. data: {
  82. pageNo: pageNo || 1,
  83. pageSize: this.state.pagination.pageSize,
  84. specially:1,//经理
  85. name: this.state.nameSearch,//客户名称
  86. orderNo:this.state.orderNoSearch,//订单编号
  87. depId: this.state.departmenttSearch,//订单部门
  88. taskId:this.state.taskId, //任务编号
  89. adminName:this.state.adminName,//任务受理人
  90. },
  91. success: function (data) {
  92. let theArr = [];
  93. if (!data.data || !data.data.list) {
  94. if (data.error && data.error.length) {
  95. message.warning(data.error[0].message);
  96. };
  97. } else {
  98. for (let i = 0; i < data.data.list.length; i++) {
  99. let thisdata = data.data.list[i];
  100. theArr.push({
  101. key: i,
  102. orderNo: thisdata.orderNo,//订单编号
  103. id:thisdata.id,//任务ID
  104. taskName:thisdata.taskName,//名称
  105. cname:thisdata.cname,//项目品类
  106. receiverName:thisdata.receiverName,//受理人
  107. projectStatus:thisdata.projectStatus,//项目状态
  108. taskStatus:thisdata.taskStatus,//任务状态
  109. taskDate:thisdata.taskDate,//分配时间
  110. commodityQuantity:thisdata.commodityQuantity,//软著数量
  111. alreadyNumber:thisdata.alreadyNumber,//下证数量
  112. userName:thisdata.taskName === '软著认证'?thisdata.userName+'('+thisdata.commodityQuantity.toString()+'/'+thisdata.alreadyNumber+')':thisdata.userName,//用户名
  113. depName:thisdata.depName,//部门名称
  114. receiverName:thisdata.receiverName,//任务责任人
  115. });
  116. };
  117. }
  118. this.state.pagination.current = data.data.pageNo;
  119. this.state.pagination.total = data.data.totalCount;
  120. if(data.data&&data.data.list&&!data.data.list.length){
  121. this.state.pagination.current=0
  122. this.state.pagination.total=0
  123. }
  124. this.setState({
  125. dataSource: theArr,
  126. pagination: this.state.pagination
  127. });
  128. }.bind(this),
  129. }).always(function () {
  130. this.setState({
  131. loading: false
  132. });
  133. }.bind(this));
  134. },
  135. getInitialState() {
  136. return {
  137. searchMore: true,
  138. assignVisible:false,
  139. releaseDate: [],
  140. roleName:'',
  141. testFlag:true,
  142. departmentArr: [],
  143. boHuivisible:false,
  144. selectedRowKeys: [],
  145. selectedRows: [],
  146. paginations:false,
  147. loading: false,
  148. pagination: {
  149. defaultCurrent: 1,
  150. defaultPageSize: 10,
  151. showQuickJumper: true,
  152. pageSize: 10,
  153. onChange: function (page) {
  154. this.loadData(page);
  155. }.bind(this),
  156. showTotal: function (total) {
  157. return '共' + total + '条数据';
  158. }
  159. },
  160. columns: [
  161. {
  162. title: '任务编号',
  163. dataIndex: 'id',
  164. key: 'id',
  165. }, {
  166. title: '任务名称',
  167. dataIndex: 'taskName',
  168. key: 'taskName',
  169. className: 'taskName'
  170. }, {
  171. title: '订单编号',
  172. dataIndex: 'orderNo',
  173. key: 'orderNo',
  174. },
  175. {
  176. title: '业务类别',
  177. dataIndex: 'cname',
  178. key: 'cname',
  179. },
  180. {
  181. title: '客户名称',
  182. dataIndex: 'userName',
  183. key: 'userName',
  184. className: 'userName'
  185. },
  186. {
  187. title: '任务状态',
  188. dataIndex: 'taskStatus',
  189. key: 'taskStatus',
  190. render: text => { return getTaskStatus(text)}
  191. },
  192. {
  193. title: '项目状态',
  194. dataIndex: 'projectStatus',
  195. key: 'projectStatus',
  196. render: text => { return getProjectStatus(text)}
  197. },
  198. {
  199. title: '分配时间',
  200. dataIndex: 'taskDate',
  201. key: 'taskDate'
  202. },
  203. {
  204. title: '任务数量',
  205. dataIndex: 'commodityQuantity',
  206. key: 'commodityQuantity'
  207. },
  208. {
  209. title: '任务责任人',
  210. dataIndex: 'receiverName',
  211. key: 'receiverName'
  212. },{
  213. title: '订单部门',
  214. dataIndex: 'depName',
  215. key: 'depName'
  216. }
  217. ],
  218. dataSource: [],
  219. searchTime: [],
  220. columnsX: [
  221. {
  222. title: '业务项目名称',
  223. dataIndex: 'commodityName',
  224. key: 'commodityName'
  225. }, {
  226. title: '项目类别',
  227. dataIndex: 'cname',
  228. key: 'cname',
  229. },{
  230. title: '项目数量',
  231. dataIndex: 'commodityQuantity',
  232. key: 'commodityQuantity'
  233. }, {
  234. title: '金额(万元)',
  235. dataIndex: 'commodityPrice',
  236. key: 'commodityPrice'
  237. }, {
  238. title: '负责人',
  239. dataIndex: 'contacts',
  240. key: 'contacts'
  241. }, {
  242. title: '负责人电话',
  243. dataIndex: 'contactsMobile',
  244. key: 'contactsMobile'
  245. }, {
  246. title: '主要项目',
  247. dataIndex: 'main',
  248. key: 'main',
  249. render:(text)=>{
  250. return (text?'是':'否')
  251. }
  252. }, {
  253. title: '项目说明',
  254. dataIndex: 'taskComment',
  255. key: 'taskComment',
  256. render:(text)=>{
  257. return (text&&text.length>8?text.substr(0,8)+'…':text)
  258. }
  259. }
  260. ],
  261. columnsA: [
  262. {
  263. title: '流程',
  264. dataIndex: 'content',
  265. key: 'content',
  266. align:'center'
  267. }, {
  268. title: '操作人',
  269. dataIndex: 'aName',
  270. key: 'aName',
  271. align:'center'
  272. }, {
  273. title: '时间',
  274. dataIndex: 'createTimes',
  275. key: 'createTimes',
  276. align:'center'
  277. }
  278. ],
  279. dataSourceX: [],
  280. dataSourceA: [],
  281. ContactsLists: [{
  282. title: '批次',
  283. dataIndex: 'num',
  284. key: 'num',
  285. },{
  286. title: '下证时间',
  287. dataIndex: 'licenceTimes',
  288. key: 'licenceTimes',
  289. }, {
  290. title: '下证数量',
  291. dataIndex: 'alreadyNumber',
  292. key: 'alreadyNumber',
  293. },
  294. {
  295. title: '未下证数量',
  296. dataIndex: 'notCount',
  297. key: 'notCount',
  298. }
  299. ],
  300. }
  301. },
  302. /* 分派 */
  303. evaluate(record,nub){
  304. this.state.assignData=record;
  305. this.setState({
  306. nub,
  307. assignVisible:true
  308. })
  309. },
  310. componentDidMount(){
  311. this.setColor()
  312. },
  313. componentWillMount() {
  314. this.departmentList();
  315. this.loadData();
  316. },
  317. tableRowClick(record, index) {
  318. this.state.RowData = record;
  319. if(record.taskName === '软著认证'){
  320. this.setState({
  321. speVisible: true,
  322. id: record.id,
  323. dataArr:record,
  324. commodityQuantity:record.commodityQuantity
  325. });
  326. }else{
  327. this.setState({
  328. visible: true,
  329. });
  330. }
  331. this.xiangqing(record.id,record.taskName);
  332. this.xiangqings(record.orderNo);
  333. this.xiangmu(record.orderNo);
  334. this.loaduserss(record);
  335. },
  336. //订单详情
  337. xiangqing(id,taskName) {
  338. $.ajax({
  339. method: "get",
  340. dataType: "json",
  341. crossDomain: false,
  342. url: globalConfig.context +"/api/admin/orderProject/orderTaskDetail",
  343. data: {
  344. id:id
  345. },
  346. success: function(data) {
  347. let theArr = [];
  348. if(data.error.length || data.data.list == "") {
  349. if(data.error && data.error.length) {
  350. message.warning(data.error[0].message);
  351. };
  352. } else {
  353. let thisdata=data.data;
  354. this.setState({
  355. id: thisdata.id,//ID
  356. orderNo: thisdata.orderNo,//订单编号
  357. userName:thisdata.userName,//客户名称
  358. taskName: thisdata.taskName,//任务名称
  359. cname:thisdata.cname,//项目品类
  360. contractNo:thisdata.contractNo,//合同编号
  361. projectStatus:thisdata.projectStatus,//项目状态
  362. taskStatus:thisdata.taskStatus,//任务状态
  363. taskDate:thisdata.taskDate,//分配时间
  364. taskComment:thisdata.taskComment,//说明
  365. attachmentUrl: thisdata.attachmentUrl ? splitUrl(thisdata.attachmentUrl, ',', globalConfig.avatarHost + '/upload') : [],//图片地址
  366. salesmanName:thisdata.salesmanName,//订单负责人
  367. startDate:thisdata.startDate,//启动日期
  368. endDate:thisdata.endDate,//结束日期
  369. acceptDate:thisdata.acceptDate,//受理日期
  370. reviewDate:thisdata.reviewDate,//评审日期
  371. publicityDate:thisdata.publicityDate,//公示日期
  372. licenceDate:thisdata.licenceDate,//发证日期
  373. contacts:thisdata.contacts,//联系人
  374. contactMobile:thisdata.contactMobile,//联系人电话
  375. legalPerson:thisdata.legalPerson,//法人
  376. legalPersonTel:thisdata.legalPersonTel,//法人电话
  377. certificateNumber:thisdata.certificateNumber,//证书编号
  378. status:thisdata.status,//状态
  379. formRetrieve:thisdata.formRetrieve,//满意度表格
  380. taskRefund:thisdata.taskRefund,//退单
  381. refundContent:thisdata.refundContent,//退单信息
  382. retrieveContent:thisdata.retrieveContent,//回收信息
  383. arrivalMoney:thisdata.arrivalMoney,//是否到款
  384. setUpAmount:thisdata.setUpAmount,//立项金额
  385. declareUser:thisdata.declareUser,//账号
  386. declarePwd:thisdata.declarePwd,//密码
  387. depName:thisdata.depName//订单部门
  388. })
  389. };
  390. }.bind(this),
  391. }).always(function() {
  392. this.setState({
  393. loading: false
  394. });
  395. }.bind(this));
  396. },
  397. //订单详情
  398. xiangqings(orderNos) {
  399. $.ajax({
  400. method: "get",
  401. dataType: "json",
  402. crossDomain: false,
  403. url: globalConfig.context +"/api/admin/newOrder/getOrderNewDetail",
  404. data: {
  405. orderNo:orderNos
  406. },
  407. success: function(data) {
  408. let theArr = [];
  409. let thisdata=data.data;
  410. let ProvinceCityArr = [];
  411. let ProvinceS = thisdata.locationProvince; //省
  412. let citys = thisdata.locationCity;//市
  413. let Areas = thisdata.locationArea;//区
  414. ProvinceCityArr.push(ProvinceS, citys, Areas);
  415. if(data.error.length || data.data.list == "") {
  416. if(data.error && data.error.length) {
  417. message.warning(data.error[0].message);
  418. };
  419. } else {
  420. this.setState({
  421. processStatus:thisdata.processStatus,//流程状态
  422. liquidationStatus:thisdata.liquidationStatus,//结算状态
  423. approval:thisdata.approval,//特批状态
  424. orderRemarks:thisdata.orderRemarks,//订单留言
  425. salesmanName:thisdata.salesmanName,//营销员名称
  426. salesmanMobile:thisdata.salesmanMobile,//营销员电话
  427. financeName:thisdata.financeName,//财务名称
  428. financeMobile:thisdata.financeMobile,//财务电话
  429. depName:thisdata.depName,//订单部门
  430. locationProvince:thisdata.locationProvince,
  431. locationCity:thisdata.locationCity,
  432. locationArea:thisdata.locationArea,
  433. ProvinceCity:ProvinceCityArr,
  434. postalAddress:thisdata.postalAddress,//详细地址
  435. setUpAmount:thisdata.setUpAmount,//立项金额
  436. })
  437. };
  438. console.log(ProvinceCityArr,this.state.ProvinceCity)
  439. }.bind(this),
  440. }).always(function() {
  441. this.setState({
  442. loading: false
  443. });
  444. }.bind(this));
  445. },
  446. //查看下证信息
  447. loaduserss(record){
  448. $.ajax({
  449. method: "get",
  450. dataType: "json",
  451. crossDomain: false,
  452. url: globalConfig.context + '/api/admin/orderProject/selectTaskProgress',
  453. data: {
  454. tid:record.id
  455. },
  456. success: function (data) {
  457. let theArr=[];
  458. let thisData=[];
  459. if (!thisData) {
  460. if (data.error && data.error.length) {
  461. message.warning(data.error[0].message);
  462. };
  463. thisData = {};
  464. }else{
  465. for(let i = 0; i < data.data.length; i++) {
  466. thisData= data.data[i];
  467. theArr.push({
  468. num:i+1,
  469. key:i,
  470. id:thisData.id,//编号
  471. alreadyNumber:thisData.alreadyNumber,//下证数
  472. licenceTimes:thisData.licenceTimes,//下证时间
  473. notCount:thisData.notCount,//未下证数
  474. flag:true
  475. })
  476. }
  477. this.setState({
  478. contactList:theArr
  479. })
  480. };
  481. }.bind(this),
  482. }).always(function () {
  483. this.setState({
  484. loading: false
  485. });
  486. }.bind(this));
  487. },
  488. //项目列表
  489. xiangmu(orderNos) {
  490. $.ajax({
  491. method: "get",
  492. dataType: "json",
  493. crossDomain: false,
  494. url: globalConfig.context +"/api/admin/newOrder/getOrderTask",
  495. data: {
  496. orderNo:orderNos
  497. },
  498. success: function(data) {
  499. let theArr = [];
  500. if(data.error.length || data.data.list == "") {
  501. if(data.error && data.error.length) {
  502. message.warning(data.error[0].message);
  503. };
  504. } else {
  505. for (let i = 0; i < data.data.length; i++) {
  506. let thisdata = data.data[i];
  507. theArr.push({
  508. key: i,
  509. id:thisdata.id,
  510. orderNo:thisdata.orderNo,//订单编号
  511. commodityId:thisdata.commodityId,//项目ID
  512. commodityName:thisdata.commodityName,//项目名称
  513. cname:thisdata.cname,//项目类别
  514. commodityPrice:thisdata.commodityPrice,//项目价格
  515. commodityQuantity:thisdata.commodityQuantity,//项目数量
  516. main:thisdata.main,//是否为主要任务
  517. taskComment:thisdata.taskComment,//任务说明
  518. contacts:thisdata.contacts,//联系人
  519. contactsMobile:thisdata.contactsMobile,//联系人电话
  520. taskStatus:thisdata.taskStatus,//是否分配
  521. });
  522. };
  523. };
  524. this.setState({
  525. dataSourceX: theArr,
  526. });
  527. }.bind(this),
  528. }).always(function() {
  529. this.setState({
  530. loading: false
  531. });
  532. }.bind(this));
  533. },
  534. caozuorizhi(){
  535. this.setState({
  536. visibleA:true
  537. })
  538. $.ajax({
  539. method: "get",
  540. dataType: "json",
  541. crossDomain: false,
  542. url: globalConfig.context +"/api/admin/orderProject/TaskLogList",
  543. data: {
  544. id:this.state.id
  545. },
  546. success: function(data) {
  547. let theArr = [];
  548. if(data.error.length || data.data.list == "") {
  549. if(data.error && data.error.length) {
  550. message.warning(data.error[0].message);
  551. };
  552. } else {
  553. for (let i = 0; i < data.data.length; i++) {
  554. let thisdata = data.data[i];
  555. theArr.push({
  556. key: i,
  557. id:thisdata.id,//日志ID
  558. content:thisdata.content,//流程
  559. taskId:thisdata.taskId,//任务ID
  560. aName:thisdata.aName,//负责人
  561. createTimes:thisdata.createTimes,//时间
  562. });
  563. };
  564. };
  565. this.setState({
  566. dataSourceA: theArr,
  567. });
  568. }.bind(this),
  569. }).always(function() {
  570. this.setState({
  571. loading: false
  572. });
  573. }.bind(this));
  574. },
  575. //关闭操作工时
  576. visitCancelA(){
  577. this.setState({
  578. visibleA:false
  579. })
  580. },
  581. //关闭详情
  582. visitCancel(e){
  583. this.setState({
  584. visible:false,
  585. speVisible:false,
  586. })
  587. this.reset();
  588. },
  589. visitOk(e){
  590. this.setState({
  591. visible:false
  592. })
  593. this.reset();
  594. },
  595. setColor(){
  596. var arr = []
  597. console.log($(".userName span"))
  598. $(".userName span").after("(<span class='ruanzhu'>软著数</span>/<span class='xiazheng'>下证数</span>)")
  599. },
  600. //测试
  601. foo2(){
  602. this.setState({
  603. testFlag1:false,
  604. speVisible:false,
  605. })
  606. },
  607. foo1(){
  608. this.setState({
  609. testFlag1:true
  610. })
  611. },
  612. foo(){
  613. this.setState({
  614. testFlag:false
  615. })
  616. },
  617. closeDesc(e, s) {
  618. this.state.showDesc = e;
  619. if (s) {
  620. this.loadData(this.state.page);
  621. };
  622. },
  623. closeAssign(e, s) {
  624. this.state.roleName='';
  625. this.state.assignVisible = e;
  626. if (s) {
  627. this.loadData(this.state.page);
  628. };
  629. },
  630. nextCancel() {
  631. this.setState({
  632. addnextVisible: false
  633. })
  634. },
  635. //点击打卡项目详情
  636. tableRowClickX(record, index) {
  637. this.setState({
  638. jid:record.id,//项目ID
  639. kid:record.commodityId,//商品ID
  640. commodityName:record.commodityName,//金额
  641. commodityPrice:record.commodityPrice,//金额
  642. commodityQuantity:record.commodityQuantity,//数量
  643. taskComment:record.taskComment,//备注
  644. main:record.main.toString(),//是否为主要
  645. addnextVisible:true,
  646. addState:0,
  647. });
  648. },
  649. search() {
  650. this.loadData();
  651. },
  652. reset() {
  653. this.state.nameSearch = '';
  654. this.state.releaseDate = [];
  655. this.state.orderNoSearch='';
  656. this.state.taskNoSearch='';
  657. this.state.departmenttSearch=undefined;
  658. this.loadData(this.state.page);
  659. },
  660. searchSwitch() {
  661. this.setState({
  662. searchMore: !this.state.searchMore
  663. });
  664. },
  665. //部门
  666. departmentList() {
  667. this.setState({
  668. loading: true
  669. });
  670. $.ajax({
  671. method: "get",
  672. dataType: "json",
  673. crossDomain: false,
  674. url: globalConfig.context + "/api/admin/organization/selectSuperId",
  675. data: {
  676. },
  677. success: function(data) {
  678. let thedata = data.data;
  679. let theArr = [];
  680. if(!thedata) {
  681. if(data.error && data.error.length) {
  682. message.warning(data.error[0].message);
  683. };
  684. thedata = {};
  685. } else {
  686. thedata.map(function(item, index) {
  687. theArr.push({
  688. key: index,
  689. name: item.name,
  690. id: item.id,
  691. })
  692. })
  693. }
  694. this.setState({
  695. departmentArr: theArr,
  696. })
  697. }.bind(this),
  698. }).always(function() {
  699. this.setState({
  700. loading: false
  701. });
  702. }.bind(this));
  703. },
  704. render() {
  705. const rowSelection = {
  706. selectedRowKeys: this.state.selectedRowKeys,
  707. onChange: (selectedRowKeys, selectedRows) => {
  708. this.setState({
  709. selectedRows: selectedRows.slice(-1),
  710. selectedRowKeys: selectedRowKeys.slice(-1)
  711. });
  712. }
  713. };
  714. const utils = {
  715. getSatisfaction:function(num){
  716. switch(num){
  717. case 0:
  718. return '未收回';
  719. case 1:
  720. return '已收回';
  721. default:
  722. return '其它';
  723. }
  724. },
  725. getChargeback:function(num){
  726. switch(num){
  727. case 0:
  728. return '已完成';
  729. case 1:
  730. return '未完成';
  731. default:
  732. return '其它';
  733. }
  734. }
  735. }
  736. const formItemLayout = {
  737. labelCol: { span: 8 },
  738. wrapperCol: { span: 14 },
  739. };
  740. const formItemLayout1 = {
  741. labelCol: { span: 6 },
  742. wrapperCol: { span: 8 },
  743. };
  744. const hasSelected = this.state.selectedRowKeys.length > 0;
  745. const { RangePicker } = DatePicker;
  746. let departmentArr = this.state.departmentArr || [];
  747. return ( <div className="user-content">
  748. <div className="content-title">
  749. <span>任务查询</span>
  750. </div>
  751. <div className="user-search">
  752. <Input placeholder="客户名称"
  753. value={this.state.nameSearch}
  754. onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />
  755. <Input placeholder="订单编号"
  756. value={this.state.orderNoSearch}
  757. onChange={(e) => { this.setState({ orderNoSearch: e.target.value }); }} />
  758. <Input placeholder="任务编号"
  759. value={this.state.taskNoSearch}
  760. onChange={(e) => { this.setState({ taskNoSearch: e.target.value }); }} />
  761. <Select placeholder="选择部门"
  762. style={{ width: 150 ,marginRight:'10px'}}
  763. value={this.state.departmenttSearch}
  764. onChange={(e) => { this.setState({ departmenttSearch: e }) }}>
  765. {
  766. departmentArr.map(function (item) {
  767. return <Select.Option key={item.id} >{item.name}</Select.Option>
  768. })
  769. }
  770. </Select>
  771. <Button type="primary" onClick={this.search}>搜索</Button>
  772. <Button onClick={this.reset}>重置</Button>
  773. {/* <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
  774. <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
  775. <span>订单时间 :</span>
  776. <RangePicker
  777. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  778. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  779. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  780. </div> */}
  781. </div>
  782. <div className="patent-table">
  783. <Spin spinning={this.state.loading}>
  784. <Table columns={this.state.columns}
  785. dataSource={this.state.dataSource}
  786. rowSelection={rowSelection}
  787. onHeaderRow={(column,index) =>{console.log(column.index)}}
  788. pagination={this.state.pagination}
  789. onRowClick={this.tableRowClick.bind(this)} />
  790. </Spin>
  791. </div>
  792. <Assign
  793. title="任务"
  794. selApi={"/api/admin/orderProject/projectDistribution"}
  795. data={this.state.assignData}
  796. showDesc={this.state.assignVisible}
  797. closeDesc={this.closeAssign.bind(this)}
  798. fenpaiData={8}
  799. specially={0}
  800. roleName={this.state.nub}
  801. />
  802. {/*<Modal
  803. className="customeDetails"
  804. footer=''
  805. title="任务详情"
  806. width='900px'
  807. visible={this.state.visible}
  808. onOk={this.visitOk}
  809. onCancel={this.visitCancel}
  810. >
  811. <Form layout="horizontal" onSubmit={this.handleSubmit} id="demand-form" style={{paddingBottom:'40px'}} >
  812. <Spin spinning={this.state.loading}>
  813. <div className="clearfix">
  814. <FormItem className="half-item"
  815. {...formItemLayout}
  816. label="订单编号" >
  817. <span>{this.state.orderNo}</span>
  818. </FormItem>
  819. <FormItem className="half-item"
  820. {...formItemLayout}
  821. label="合同编号" >
  822. <span>{this.state.contractNo}</span>
  823. </FormItem>
  824. <FormItem className="half-item"
  825. {...formItemLayout}
  826. label="客户名称" >
  827. <span>{this.state.userName}</span>
  828. </FormItem>
  829. <FormItem className="half-item"
  830. {...formItemLayout}
  831. label="合同签订时间" >
  832. <span>{this.state.signDate}</span>
  833. </FormItem>
  834. <FormItem className="half-item"
  835. {...formItemLayout}
  836. label="流程状态" >
  837. <span>{getProcessStatus(this.state.processStatus)}</span>
  838. </FormItem>
  839. <FormItem className="half-item"
  840. {...formItemLayout}
  841. label="结算状态" >
  842. <span>{getLiquidationStatus(this.state.liquidationStatus)}</span>
  843. </FormItem>
  844. <FormItem className="half-item"
  845. {...formItemLayout}
  846. label="企业联系人" >
  847. <span>{this.state.contacts}</span>
  848. </FormItem>
  849. <FormItem className="half-item"
  850. {...formItemLayout}
  851. label="联系人电话" >
  852. <span>{this.state.contactMobile}</span>
  853. </FormItem>
  854. <FormItem className="half-item"
  855. {...formItemLayout}
  856. label="企业法人" >
  857. <span>{this.state.legalPerson}</span>
  858. </FormItem>
  859. <FormItem className="half-item"
  860. {...formItemLayout}
  861. label="法人电话" >
  862. <span>{this.state.legalPersonTel}</span>
  863. </FormItem>
  864. <FormItem className="half-item"
  865. {...formItemLayout}
  866. label="签单金额(万元)" >
  867. <span>{this.state.totalAmount}</span>
  868. </FormItem>
  869. <FormItem className="half-item"
  870. {...formItemLayout}
  871. label="首付金额(万元)" >
  872. <span>{this.state.firstAmount}</span>
  873. </FormItem>
  874. <FormItem className="half-item"
  875. {...formItemLayout}
  876. label="特批立项" >
  877. <span>{getApprovedState(this.state.approval)}</span>
  878. </FormItem>
  879. <FormItem className="half-item"
  880. {...formItemLayout}
  881. label="已收款项(万元)" >
  882. <span>{this.state.settlementAmount}</span>
  883. </FormItem>
  884. <div className='clearfix'>
  885. <FormItem
  886. labelCol={{ span: 4 }}
  887. wrapperCol={{ span: 16 }}
  888. label="订单留言" >
  889. <span>{this.state.orderRemarks}</span>
  890. </FormItem>
  891. </div>
  892. <div className='clearfix'>
  893. <FormItem className="half-item"
  894. {...formItemLayout}
  895. label="订单负责人" >
  896. <span>{this.state.salesmanName}</span>
  897. </FormItem>
  898. <FormItem className="half-item"
  899. {...formItemLayout}
  900. label="订单负责人电话" >
  901. <span>{this.state.salesmanMobile}</span>
  902. </FormItem>
  903. <FormItem className="half-item"
  904. {...formItemLayout}
  905. label="订单部门" >
  906. <span>{this.state.depName}</span>
  907. </FormItem>
  908. </div>
  909. <div className='clearfix'>
  910. <FormItem className="half-item"
  911. {...formItemLayout}
  912. label="财务负责人" >
  913. <span>{this.state.financeName}</span>
  914. </FormItem>
  915. <FormItem className="half-item"
  916. {...formItemLayout}
  917. label="财务负责人电话" >
  918. <span>{this.state.financeMobile}</span>
  919. </FormItem>
  920. </div>
  921. <div>
  922. <span style={{marginLeft:'50px',fontSize:'20px'}}>项目业务</span>
  923. {this.state.processStatus==0?<Button type='primary' onClick={this.addDetailed} style={{float:'right',marginRight:'50px',marginBottom:'15px'}}>添加项目明细</Button>:""}
  924. </div>
  925. <div className="patent-table">
  926. <Spin spinning={this.state.loading}>
  927. <Table columns={this.state.columnsX}
  928. dataSource={this.state.dataSourceX}
  929. pagination={this.state.paginations}
  930. onRowClick={this.tableRowClickX}
  931. />
  932. </Spin>
  933. </div>
  934. </div>
  935. </Spin>
  936. </Form>
  937. </Modal>*/}
  938. <Modal maskClosable={false} visible={this.state.addnextVisible}
  939. onOk={this.nextCancel} onCancel={this.nextCancel}
  940. width='900px'
  941. title='项目任务详情'
  942. footer=''
  943. className="admin-desc-content">
  944. <Form layout="horizontal" onSubmit={this.nextSubmit} id="demand-form">
  945. <Spin spinning={this.state.loading}>
  946. <div className='clearfix'>
  947. <FormItem className="half-item"
  948. {...formItemLayout}
  949. label="项目名称" >
  950. <span>{this.state.commodityName}</span>
  951. </FormItem>
  952. <FormItem className="half-item"
  953. {...formItemLayout}
  954. label="项目数量" >
  955. <span>{this.state.commodityQuantity}</span>
  956. </FormItem>
  957. <FormItem className="half-item"
  958. {...formItemLayout}
  959. label="金额(万元)" >
  960. <span>{this.state.commodityPrice}</span>
  961. </FormItem>
  962. <FormItem className="half-item"
  963. {...formItemLayout}
  964. label="主要项目" >
  965. <span>{getboutique(this.state.main)}</span>
  966. </FormItem>
  967. <div className='clearfix'>
  968. <FormItem
  969. labelCol={{ span: 4 }}
  970. wrapperCol={{ span: 16 }}
  971. label="服务说明" >
  972. <span>{this.state.taskComment}</span>
  973. </FormItem>
  974. </div>
  975. </div>
  976. </Spin>
  977. </Form >
  978. </Modal>
  979. <Modal width='800px'
  980. title='操作日志'
  981. footer=''
  982. className="admin-desc-content">
  983. <div className="patent-table patent-table-center">
  984. <Spin spinning={this.state.loading}>
  985. <Table columns={this.state.columnsY}/>
  986. </Spin>
  987. </div>
  988. </Modal>
  989. <Modal maskClosable={false} visible={this.state.speVisible}
  990. onOk={this.visitOk} onCancel={this.visitCancel}
  991. width='900px'
  992. title='项目概况'
  993. footer=''
  994. className="admin-desc-content">
  995. <div className="clearfix">
  996. <FormItem className="half-item"
  997. {...formItemLayout}
  998. label="当前项目情况">
  999. <span>{this.state.status?'暂停':'开启'}</span>
  1000. <Button type='primary' size='small' style={{marginTop:'5px',position:'absolute'}} onClick={this.caozuorizhi}>操作日志</Button>
  1001. </FormItem>
  1002. <FormItem className="half-item"
  1003. {...formItemLayout}
  1004. label="合同编号">
  1005. <span>{this.state.contractNo}</span>
  1006. </FormItem>
  1007. </div>
  1008. <div className="clearfix">
  1009. <FormItem className="half-item"
  1010. {...formItemLayout}
  1011. label="项目状态">
  1012. <span>{getProcessStatus(this.state.projectStatus)}</span>
  1013. </FormItem>
  1014. <FormItem className="half-item"
  1015. {...formItemLayout}
  1016. label="是否特批">
  1017. <span>{getApproval(this.state.approval)}</span>
  1018. </FormItem>
  1019. <FormItem className="half-item"
  1020. {...formItemLayout}
  1021. label="结算状态">
  1022. <span>{getLiquidationStatus(this.state.liquidationStatus)}</span>
  1023. </FormItem>
  1024. <FormItem className="half-item"
  1025. {...formItemLayout}
  1026. label="流程状态">
  1027. <span>{getProcessStatus(this.state.processStatus)}</span>
  1028. </FormItem>
  1029. <FormItem className="half-item"
  1030. {...formItemLayout}
  1031. label="订单编号">
  1032. <span>{this.state.orderNo}</span>
  1033. </FormItem>
  1034. </div>
  1035. <div className="clearfix">
  1036. <FormItem className="half-item"
  1037. {...formItemLayout}
  1038. label="满意度表格">
  1039. <span>{utils.getSatisfaction(this.state.formRetrieve)}</span>
  1040. </FormItem>
  1041. <FormItem className="half-item"
  1042. {...formItemLayout}
  1043. label="退单">
  1044. <span>{utils.getChargeback(this.state.taskRefund)}</span>
  1045. </FormItem>
  1046. </div>
  1047. <div className="clearfix">
  1048. {<FormItem className='half-item'
  1049. {...formItemLayout}
  1050. label="(满意度)备注">
  1051. <span>{this.state.retrieveContent}</span>
  1052. </FormItem>}
  1053. {<FormItem className='half-item'
  1054. {...formItemLayout}
  1055. label="(退单)备注">
  1056. <span>{this.state.refundContent}</span>
  1057. </FormItem>}
  1058. </div>
  1059. <div className="clearfix">
  1060. <h3 className='sub-title'>任务信息</h3>
  1061. <FormItem className="half-item"
  1062. {...formItemLayout}
  1063. label="任务编号">
  1064. <span>{this.state.id}</span>
  1065. </FormItem>
  1066. <FormItem className="half-item"
  1067. {...formItemLayout}
  1068. label="任务名称">
  1069. <span>{this.state.taskName}</span>
  1070. </FormItem>
  1071. <FormItem className="half-item"
  1072. {...formItemLayout}
  1073. label="任务状态">
  1074. <span>{getTaskStatus(this.state.taskStatus)}</span>
  1075. </FormItem>
  1076. <FormItem className="half-item"
  1077. {...formItemLayout}
  1078. label="任务类别">
  1079. <span>{this.state.cname}</span>
  1080. </FormItem>
  1081. <FormItem className="half-item"
  1082. {...formItemLayout}
  1083. label="证书编号" >
  1084. <span>{this.state.certificateNumber}</span>
  1085. </FormItem>
  1086. </div>
  1087. {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
  1088. <div className="clearfix">
  1089. <h3 className='sub-title'>联系信息</h3>
  1090. <FormItem className="half-item"
  1091. {...formItemLayout}
  1092. label="客户名称">
  1093. <span>{this.state.userName}</span>
  1094. </FormItem>
  1095. <FormItem className="half-item"
  1096. {...formItemLayout}
  1097. label="企业法人">
  1098. <span>{this.state.legalPerson}</span>
  1099. </FormItem>
  1100. <FormItem className="half-item"
  1101. {...formItemLayout}
  1102. label="法人电话">
  1103. <span>{this.state.legalPersonTel}</span>
  1104. </FormItem>
  1105. <FormItem className="half-item"
  1106. {...formItemLayout}
  1107. label="客户联系人">
  1108. <span>{this.state.contacts}</span>
  1109. </FormItem>
  1110. <FormItem className="half-item"
  1111. {...formItemLayout}
  1112. label="联系人电话">
  1113. <span>{this.state.contactMobile}</span>
  1114. </FormItem>
  1115. <FormItem className="half-item"
  1116. {...formItemLayout}
  1117. label="企业地址">
  1118. <span>{getprovince(this.state.locationProvince)}/{getprovince(this.state.locationCity)}/{getprovince(this.state.locationArea)}</span>
  1119. </FormItem>
  1120. <FormItem className="half-item"
  1121. {...formItemLayout}
  1122. label="">
  1123. </FormItem>
  1124. <FormItem className="half-item"
  1125. {...formItemLayout}
  1126. label="详细地址">
  1127. <span>{this.state.postalAddress}</span>
  1128. </FormItem>
  1129. </div>
  1130. {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
  1131. <div className="clearfix">
  1132. <h3 className='sub-title'>订单负责人信息</h3>
  1133. <FormItem className="half-item"
  1134. {...formItemLayout}
  1135. label="负责人">
  1136. <span>{this.state.salesmanName+'(湖南科德)'}</span>
  1137. </FormItem>
  1138. <FormItem className="half-item"
  1139. {...formItemLayout}
  1140. label="负责人电话">
  1141. <span>{this.state.salesmanMobile}</span>
  1142. </FormItem>
  1143. <FormItem className="half-item"
  1144. {...formItemLayout}
  1145. label="财务负责人">
  1146. <span>{this.state.financeName}</span>
  1147. </FormItem>
  1148. <FormItem className="half-item"
  1149. {...formItemLayout}
  1150. label="财务负责人电话">
  1151. <span>{this.state.financeMobile}</span>
  1152. </FormItem>
  1153. </div>
  1154. <div className="clearfix" style={{marginTop:'10px'}}>
  1155. <FormItem
  1156. labelCol={{ span: 3 }}
  1157. wrapperCol={{ span: 18 }}
  1158. label='附件'
  1159. >
  1160. <Upload className="demandDetailShow-upload"
  1161. listType="picture-card"
  1162. fileList={this.state.attachmentUrl}
  1163. onPreview={(file) => {
  1164. this.setState({
  1165. previewImage: file.url || file.thumbUrl,
  1166. previewVisible: true,
  1167. });
  1168. }} >
  1169. </Upload>
  1170. <Modal maskClosable={false} footer={null}
  1171. visible={this.state.previewVisible}
  1172. onCancel={() => { this.setState({ previewVisible: false }) }}>
  1173. <img alt="" style={{ width: '100%' }} src={this.state.previewImage || ''} />
  1174. </Modal>
  1175. </FormItem>
  1176. </div>
  1177. <div className="clearfix">
  1178. <FormItem
  1179. labelCol={{ span: 3 }}
  1180. wrapperCol={{ span: 16 }}
  1181. label="备注">
  1182. <span>{this.state.taskComment}</span>
  1183. </FormItem>
  1184. </div>
  1185. <div className="clearfix">
  1186. <h3 className='sub-title'>项目申报进度</h3>
  1187. <FormItem className="half-item"
  1188. {...formItemLayout}
  1189. label="启动时间">
  1190. <span>{this.state.startDate}</span>
  1191. </FormItem>
  1192. <FormItem className="half-item"
  1193. {...formItemLayout}
  1194. label="软著派单数量">
  1195. <span>{this.state.commodityQuantity}</span>
  1196. </FormItem>
  1197. <div className="patent-table patent-table-center">
  1198. <Spin spinning={this.state.loading}>
  1199. <Table columns={this.state.ContactsLists}
  1200. dataSource={this.state.contactList}
  1201. pagination={false}/>
  1202. </Spin>
  1203. </div>
  1204. </div>
  1205. <div className="clearfix">
  1206. <h3 className='sub-title'>项目业务</h3>
  1207. <div className="patent-table">
  1208. <Spin spinning={this.state.loading}>
  1209. <Table columns={this.state.columnsX}
  1210. dataSource={this.state.dataSourceX}
  1211. pagination={this.state.paginations}
  1212. onRowClick={this.tableRowClickX}
  1213. />
  1214. </Spin>
  1215. </div>
  1216. </div>
  1217. </Modal>
  1218. <Modal width='800px' visible={this.state.visibleA}
  1219. onCancel={this.visitCancelA}
  1220. title='操作日志'
  1221. footer=''
  1222. className="admin-desc-content">
  1223. <div className="patent-table patent-table-center">
  1224. <Spin spinning={this.state.loading}>
  1225. <Table columns={this.state.columnsA}
  1226. dataSource={this.state.dataSourceA}
  1227. pagination={false}/>
  1228. </Spin>
  1229. </div>
  1230. </Modal>
  1231. </div> )
  1232. }
  1233. })
  1234. export default Task;